最近我发现在我的绑定中,第二种简化方法的工作方式和第二种方法一样好。由于我总是使用第一个来完成它,我想知道选择其中一个的原因是什么。
使用虚拟私有变量的公共方法
public ObservableCollection<MyDeviceInfo> DiscoveredDevicesList
{
get
{
return _DiscoveredDevicesList;
}
set
{
_DiscoveredDevicesList = value;
OnPropertyChanged("DiscoveredDevicesList");
}
}
private ObservableCollection<MyDeviceInfo> _DiscoveredDevicesList;
自动实施的属性
public ObservableCollection<MyDeviceInfo> DiscoveredDevicesList { get; set; }
答案 0 :(得分:1)
使用自动实现的属性,如果将DiscoveredDevicesList
属性设置为全新的ObservableCollection
,则您的视图将无法知道。但是,如果您要做的只是在ObservableCollection
的单个实例中添加/删除/重新排序项目,那么这将正常工作,因为该视图也绑定到INotifyCollectionChanged
接口(由ObservableCollection
上的DiscoveredDevicesList
}。
答案 1 :(得分:1)
您可以绑定自动属性,但是您从代码对属性所做的任何更改都不会显示在UI中。通常,用于数据绑定的任何对象都应包含更改通知,因此不应使用自动属性。
答案 2 :(得分:1)
它主要指ObservableCollection<T>
属性。 Public method with a dummy Private variable
需要通过XAML指定DataContext,例如:
ObservableCollection<T>
public class ViewModel : NotificationObject
{
private ObservableCollection<Person> _myCollection;
public ObservableCollection<Person> MyCollection
{
get
{
return _myCollection;
}
set
{
_myCollection = value;
NotifyPropertyChanged("MyCollection");
}
}
}
XAML
<!-- Set the DataContext in XAML -->
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
<Grid>
<ListBox ItemsSource="{Binding Path=MyCollection}" /> <!-- Or any other control -->
</Grid>
在代码隐藏中使用这样的集合:
ViewModel MyViewModel = this.DataContext as ViewModel;
MyViewModel.MyCollection = new ObservableCollection<Person>();
MyViewModel.MyCollection.Add(new Person()
{
Age = 22,
Name = "Nick",
});
在这种情况下,如果集合具有自动属性:
public ObservableCollection<Person> MyCollection
{
get;
set;
}
然后Binding
不起作用,即它不会更新属性集合。但是,如果您在代码隐藏中设置DataContext
:
this.DataContext = MyViewModel;
Binding
将使用自动属性。