强制依赖 属性 刷新

Force dependency property to refresh

我想强制绑定我的列表框以刷新其内容。 我的列表框绑定到依赖项 属性:

<ListBox ... DataContext="{Binding ElementName=_this}" ItemsSource="{Binding Path=MyList}"/>

我想刷新列表框的内容,例如,当我按下一个按钮以调用 DependencyProperty MyList get 时。

您可以将 MyList 设为 ObservableCollection, or something else which implements INotifyCollectionChanged

然后如果您更改了 MyList 的内容,ListBox 将自动更新

在这种情况下,您甚至不需要将 MyList 声明为依赖项 属性。一个简单的只读 属性 就足够了:

public ObservableCollection<MyItem> MyList { get; }
    = new ObservableCollection<MyItem>();

使用 ObservableCollection 作为要在列表框中显示的项目的容器。这将在添加或删除项目时自动触发控件刷新。

由于您现在不再需要创建新集合(只需刷新其内容),因此您可以为此使用常规 C# 属性。

就个人而言,我会将其抽象出来

private ObservableCollection<MyItem> _mylist = new  ObservableCollection<MyItem>();
public IEnumerable<MyItem> MyList => _mylist;

刷新列表...

_myList.Clear();
_mylist.Add( ... );

控件仍会更新,因为它检测到 MyList 实现了 INotifyCollectionChanged,即使它只是声明为 IEnumerable。

您永远不应将 DependencyProperty 用于数据绑定源 - 常规 属性,结合 INotifyPropertyChanged 是更新其值的任何属性的首选方式。查看 MVVM 模式,将其作为将用户界面与代码的其余部分分开的一种方式。