在我的WPF应用程序中,我有一个组合框。它通过MVVM设计模式绑定数据。它工作得很好。
在XAML中
<ComboBox x:Name="comboBox1" ItemsSource="{Binding ValetType}" DisplayMemberPath="Name"
SelectedItem="{Binding SelectedItemValet, Mode=TwoWay}" IsSynchronizedWithCurrentItem="True"/>
在视图模型中
valetTypes = GetValueForValet();
public ObservableCollection<Valet> ValetType
{
get { return valetTypes; }
set { valetTypes = value; NotifyPropertyChanged("ValetType"); }
}
public Valet SelectedItemValet
{
get { return selectedItemValet;}
set { selectedItemValet = value; NotifyPropertyChanged("SelectedItemValet"); }
}
我面临的一个问题是,当我不更改组合框值时,它会绑定null,否则它会绑定。我将IsSynchronizedWithCurrentItem设置为true,它告诉选择器应该保持SelectedItem与当前项同步。但不会起作用。我怎么能这么做?我是WPF MVVM的新手。
您的代码中有一个问题:
public ValetServices SelectedItemValet
{
get { return selectedItemValet;}
set { selectedItemValet = value; NotifyPropertyChanged("SelectedItemValet"); }
}
ValetType
是 Type Valet,但 SelectedItemValet
是 Type ValetServices
。它们应该匹配。更改后,例如,要选择第一项,请执行以下操作:
valetTypes = GetValueForValet();
this.SelectedItemValet=ValetType.FirstOrDefault();
最简单的解决方案是为您的< code>SelectedItemValet提供一个默认值。
在ViewModel的某些方法中,在初始化ViewModel时调用(通常是构造函数),您可以将SeletedItemValet
设置为所需的值