下面是如何組合框綁定到一個書單,並使用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。 –