【发布时间】:2015-02-10 08:42:32
【问题描述】:
我有一个ListView 绑定到我创建的类的列表。在进行操作时,它应该从列表中添加/删除项目,但是即使我使用了INotifyPropertyChanged,我的ListView 也没有更新。
如果我使用ObservableCollection,它可以工作,但我需要对列表进行排序,而ObservableCollection 不会对 WPF4.0 进行排序:(
有什么方法可以使 List 绑定工作?为什么我用了INotifyPropertyChanged还是不行?
XAML:
<ListView BorderThickness="0" ItemsSource="{Binding SelectedValues, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Padding="5">
<ListView.View>
<GridView ColumnHeaderContainerStyle="{StaticResource myHeaderStyle}">
<GridViewColumn DisplayMemberBinding="{Binding Value}"></GridViewColumn>
虚拟机:
private List<CheckBoxItem> _selectedValues = new List<CheckBoxItem>();
public List<CheckBoxItem> SelectedValues
{
get { return _selectedValues; }
set
{
_selectedValues = value;
OnPropertyChanged();
}
}
private void UnselectValueCommandExecute(CheckBoxItem value)
{
value.IsSelected = false;
SelectedValues.Remove(value);
//OnPropertyChanged("SelectedValues");
OnPropertyChanged("IsAllFilteredValuesSelected");
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
CheckBoxItem 类包含 2 个属性,Value 和 IsChecked,我认为这与这里无关。
所以基本上,我有一个按钮,它使用UnselectValueCommandExecute 从列表中删除项目,我应该在 UI 中看到更新的列表,但我没有。
调试时,我可以看到 SelectedValues 列表已更新,但我的 UI 却没有。
【问题讨论】:
-
把你的代码Xaml和VM!
-
这取决于您如何实现 INotifyPropertyChanged。如果您像其他任何属性一样执行此操作,那么它将在整个集合对象本身发生更改时触发,而不是在其元素被修改时触发。
-
向我们展示您的 c#-Code 和您的列表。你的 XAML 也会很棒。
-
这对您没有帮助吗? [WPF ListBox 绑定更新][1] [1]: stackoverflow.com/questions/19906911/wpf-listbox-binding-update
-
听起来您正在视图模型中实现排序。取决于你想要做什么,sorting can be handled by the view.
标签: c# wpf list observablecollection inotifypropertychanged