c# - 自动实现的属性与自动实现的属性绑定(bind)中的公共(public)属性

标签 c# wpf binding set accessor

最近我发现在我的绑定(bind)中,第二种简化方法与第二种方法一样有效。由于我一直使用第一个,所以我想知道选择其中一个的原因是什么。

带有虚拟私有(private)变量的公共(public)方法

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

自动实现的属性

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

最佳答案

它主要指的是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将与自动属性一起使用。

关于c# - 自动实现的属性与自动实现的属性绑定(bind)中的公共(public)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23076319/

相关文章:

wpf - 通过验证绑定(bind)到双字段

wpf - TwoWay 或 OneWayToSource 绑定(bind)无法对只读属性起作用

c# - 避免使用一本字典的更好代码 - 区分大小写问题

c# - TextBox 更新后的 KeyUp 事件

c# - 什么是应用程序变量?我如何在 ASP.NET MVC 中声明应用程序变量?

c# - WPF 创建同级窗口并关闭当前窗口

c# - 如何不丢失绑定(bind)源更新?

c# - 检查是否已设置类属性

wpf - 不能使用属于与其父 Freezable 不同的线程的 DependencyObject

c# - Dispatcher.CurrentDispatcher.BeginInvoke 未调用