下面是如何组合框绑定到一个书单,并使用MVVM的标签上显示的书名的例子。
在XAML标记,使用的ItemsSource及的SelectedItem属性
<ComboBox Name="cbBook" ItemsSource="{Binding Books}" SelectedItem="{Binding SelectedBook, Mode=TwoWay}" />
<Label DataContext="{Binding SelectedBook}" Content="{Binding Title}" />
视图中的组合框绑定到视图模型,设置在DataContext到您的视图模型类
public partial class MyView : UserControl
{
public MyView()
{
InitializeComponent();
DataContext = new BookViewModel();
}
}
视图模型应该具有您将绑定到的公共属性。
public class BookViewModel : BaseViewModel
{
public BookViewModel()
{
Books = new ObservableCollection<Book>();
}
public ObservableCollection<Book> Books { get; set; }
private Book _selectedBook;
public Book SelectedBook
{
get { return _selectedBook; }
set
{
_selectedBook = value;
NotifyPropertyChanged(() => SelectedBook);
}
}
}
该基类实现INotifyPropertyChanged接口。我为类型安全使用了lambda表达式。
public abstract class BaseViewModel : INotifyPropertyChanged
{
protected void NotifyPropertyChanged<T>(Expression<Func<T>> expression)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(((MemberExpression)expression.Body).Member.Name));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
我同意。 'SelectedItem'是要走的路,因为然后他可以将任何其他字段绑定到SelectedItem(或SelectedItem上的一个属性)。 –
谢谢。但现在问题是我在模型中使用entlib验证程序,如果我将选定的ComboBox对象绑定到ViewModel,那么我无法在ComboBox中显示验证结果图像(因为Combobox绑定ViewModel.Object,而不是Model.SelectedObjectId) – davor
,我的朋友,是一匹不同颜色的马。您应该相应地检查或更改验证程序(因此它不需要该ID,但可以解析实例中的ID。 –