提问者:小点点

如果组合框未更改 WPF MVVM 模式中的值,如何设置该值


在我的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的新手。


共2个答案

匿名用户

您的代码中有一个问题:

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设置为所需的值