I have an issue to set in TokenMode for DevExpress WPF control SelectCOmboBox some items.
I have an xaml for column in my datagrid:
<!-- Competencies Column with Token ComboBox -->
<dxg:GridColumn FieldName ="Competencies" Header="Competencies" Width="200">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<dxe:ComboBoxEdit Name="PART_Editor"
ItemsSource="{Binding Row.Competencies}"
SelectedItem="{Binding Row.SelectedCompetencies}"
ValueMember="Id"
DisplayMember="Name"
ImmediatePopup="False">
<dxe:ComboBoxEdit.StyleSettings>
<dxe:TokenComboBoxStyleSettings />
</dxe:ComboBoxEdit.StyleSettings>
</dxe:ComboBoxEdit>
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
And I setup my model with INotifyPropertyChanged:
public class Team : INotifyPropertyChanged
{
public int Id { get; set; }
public string Name { get; set; }
public ObservableCollection<Competency> Competencies { get; set; } = new ObservableCollection<Competency>();
private ObservableCollection<Competency> _selectedCompetencies = new ObservableCollection<Competency>();
public ObservableCollection<Competency> SelectedCompetencies
{
get => _selectedCompetencies;
set
{
if (_selectedCompetencies != value)
{
_selectedCompetencies = value;
OnPropertyChanged(nameof(SelectedCompetencies));
}
}
}
public ObservableCollection<Employee> Employees { get; set; } = new ObservableCollection<Employee>();
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public class Competency : INotifyPropertyChanged
{
private bool _isSelected;
public string Id { get; set; }
public string Name { get; set; }
public int Ordinal { get; set; }
public char State { get; set; }
public bool IsSelected
{
get => _isSelected;
set
{
if (_isSelected != value)
{
_isSelected = value;
OnPropertyChanged(nameof(IsSelected));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
It lists correctly dropdown, but it wont bind selected items.
I currently test it through my constructor with some dummy data:
public partial class TeamsAdmin : Page
{
public ObservableCollection<Team> TeamsItems { get; set; }// = new ObservableCollection<Team>();
public ObservableCollection<Models.Competency> Competencies { get; set; } = new ObservableCollection<Models.Competency>();
public ObservableCollection<Employee> Employees { get; set; } = new ObservableCollection<Employee>();
public TeamsAdmin()
{
InitializeComponent();
DataContext = this;
// Sample data
var competencies = new ObservableCollection<Competency>
{
new Competency { Id = "1", Name = "Leadership", IsSelected=true },
new Competency { Id = "2", Name = "Communication", IsSelected = true },
new Competency { Id = "3", Name = "Problem Solving", IsSelected = true }
};
var teamA = new Team
{
Id = 1,
Name = "Team A",
Competencies = competencies,
SelectedCompetencies = new ObservableCollection<Competency> { competencies[0], competencies[1] }
};
TeamsItems = new ObservableCollection<Team> { teamA };
}
}