У меня есть datagrid со списком объектов MyPlayer, связанных с ItemsSource, внутри сетки есть ComboBoxes, которые связаны со списком внутренних объектов, и привязка работает правильно: когда я выбираю один из элементов, его значение помещается в модель данных и соответственно обновляется в других местах, где используется.
Единственная проблема: исходные выборы не отображаются в моих ComboBox. Не знаю почему ..?
Экземпляр ViewModel назначается для просмотра DataContext. Вот сетка с ComboBoxes (сетка привязана к свойству 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).
Что не так в этом примере? Любая помощь будет приветствоваться.
Спасибо.