我最近開始學習MVVM模式,並創建了一個簡單的應用程序來測試幾件事情。MVVM WPF列表框條目不更新
我有一個簡單的查看與:項目
- ListBox中持有的ObservableCollection
- 刪除按鈕
- 新建按鈕
- 文本框的項目說明
- 文本框的項目值
除了事實是,如果我正在更新項目描述ListBox項不更新。我讀了一些關於這個的文章,所以我認爲它與CollectionChanged沒有被調用有關。我嘗試了一些可能的解決方案來解決這個問題,但是他們都沒有成功所以也許我的方法總是有些問題。
希望有人能幫助我解決這個問題。
型號/ Item.cs
internal class Item : INotifyPropertyChanged
{
#region Fields
private string value;
private string description;
#endregion
#region Constructors
public Item()
{
}
public Item(string value, string description) {
this.description = description;
this.value = value;
}
#endregion
public String Value
{
get
{
return value;
}
set
{
this.value = value;
OnPropertyChanged("Value");
}
}
public String Description
{
get
{
return description;
}
set
{
description = value;
OnPropertyChanged("Description");
}
}
#region Overrides
public override string ToString()
{
return description;
}
#endregion String Override
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
視圖模型/ MainViewModel.cs
...
private ObservableCollection<Item> items;
private Item selectedItem;
public ObservableCollection<Item> Items {
get
{
return items;
}
set
{
items = value;
OnPropertyChanged("Items");
}
}
public Item SelectedItem {
get
{
return selectedItem;
}
set
{
selectedItem = value;
OnPropertyChanged("SelectedItem");
}
}
...
查看/ MainWindow.xaml
...
<Button Content="New" Command="{Binding NewCommand}" />
<Button Content="Delete" Command="{Binding DeleteCommand}" />
<ListBox x:Name="lbxItems" ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" />
<TextBox Text="{Binding SelectedItem.Description}" />
<TextBox Text="{Binding SelectedItem.Value}" />
...
您同時使用'SelectedRange'和'SelectedItem'的列表框/文本框綁定。這是打算? – Dirk
你能否提供你的Item類實現? – sszarek
當Description屬性中的值更新時,是否調用OnPropertyChanged(「Description」)? – Bells