自动实现的属性。绑定中的公共属性

时间:2014-04-15 06:43:16

标签: c# wpf binding set accessor

最近我发现在我的绑定中,第二种简化方法的工作方式和第二种方法一样好。由于我总是使用第一个来完成它,我想知道选择其中一个的原因是什么。

使用虚拟私有变量的公共方法

public ObservableCollection<MyDeviceInfo> DiscoveredDevicesList
{
    get
    {
        return _DiscoveredDevicesList;
    }
    set
    {
        _DiscoveredDevicesList = value;
        OnPropertyChanged("DiscoveredDevicesList");
    }
}
private ObservableCollection<MyDeviceInfo> _DiscoveredDevicesList;

自动实施的属性

public ObservableCollection<MyDeviceInfo> DiscoveredDevicesList { get; set; }

3 个答案:

答案 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将使用自动属性。