У меня есть таблица данных со списком объектов MyPlayer, связанных с ItemsSource, внутри сетки есть ComboBox, которые связаны со списком внутреннего объекта, и привязка работает правильно: когда я выбираю один из элементов, его значение передается в данные Модель и соответственно обновляется в других местах, где она используется.
Единственная проблема: начальные выборы не отображаются в моих комбинированных списках. Я не знаю почему ..?
Экземпляр ViewModel назначен для просмотра DataContext. Вот сетка с комбинированными ячейками (сетка привязана к свойству SquadPlayers ViewModel):
<data:DataGrid ="True" AutoGenerateColumns="False" ItemsSource="{Binding SquadPlayers}">
<data:DataGrid.Columns>
<data:DataGridTemplateColumn Header="Rig." Width="50">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox SelectedItem="{Binding Rigid, Mode=TwoWay}"
ItemsSource="{Binding IntLevels, Mode=TwoWay}"/>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
Вот класс ViewModel (метод _model_DataReceivedEvent вызывается асинхронно, когда данные поступают с сервера):
public class SquadViewModel : ViewModelBase<SquadModel>
{
public SquadViewModel()
{
SquadPlayers = new ObservableCollection<SquadPlayer>();
}
private void _model_DataReceivedEvent(List<SostavPlayerData> allReadyPlayers)
{
TeamTask task = new TeamTask { Rigid = 1 };
foreach (SostavPlayerData spd in allReadyPlayers)
{
SquadPlayer sp = new SquadPlayer(spd, task);
SquadPlayers.Add(sp);
}
RaisePropertyChanged("SquadPlayers");
}
А вот класс SquadPlayer (его объекты связаны со строками сетки):
public class SquadPlayer : INotifyPropertyChanged
{
public SquadPlayer(SostavPlayerData spd)
{
_spd = spd;
Rigid = 2;
}
public event PropertyChangedEventHandler PropertyChanged;
private int _rigid;
public int Rigid
{
get { return _rigid; }
set
{
_rigid = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Rigid"));
}
}
}
private readonly ObservableCollection<int> _statIntLevels = new ObservableCollection<int> { 1, 2, 3, 4, 5 };
public ObservableCollection<int> IntLevels { get { return _statIntLevels; } }
Ожидается, что все комбинированные блоки "Жесткие" будут установлены в значение "2", но они не выбраны (элементы находятся в раскрывающемся списке, и, если выбрано какое-либо значение, оно перейдет в ViewModel). *
Что не так с этим примером? Любая помощь будет приветствоваться.
Спасибо.