我有带有链接到ItemsSource的MyPlayer对象列表的数据网格,网格内部有一个链接到内部对象列表的组合框,并且绑定正常工作:当我选择其中一个项目时,其值被推送到数据模型并在其他地方适当更新,使用它。
唯一的问题:我的ComboBox中没有显示初始选择。我不知道为什么......?
分配ViewModel的实例以查看DataContext。这是带有ComboBoxes的网格(网格绑定到ViewModel的SquadPlayers属性):
<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)。
这个例子有什么问题?欢迎任何帮助。
感谢。
答案 0 :(得分:3)
将XAML的顺序更改为
ItemsSource="{Binding IntLevels, Mode=TwoWay}"
SelectedItem="{Binding Rigid, Mode=TwoWay}"
我知道这看起来很有趣但我以前遇到过这个问题。它试图在ItemSource存在之前绑定SelectedValue,这就是为什么在初始化之后一切正常。