【问题标题】:Avoiding unnecessary set accessor for TwoWay DataBinding to Collection避免将双向数据绑定到集合的不必要的集合访问器
【发布时间】:2011-10-21 13:59:35
【问题描述】:

我将 DataGrid 绑定到 ObservableCollection 为:

<DataGrid ItemsSource="{Binding Path=MyCollection, Mode=TwoWay}">

viewmodel 中的属性如下所示:

public ObservableCollection<MyType> MyCollection
{
    get { return this.Model.Collection; }
    set { /* Empty but needed for data binding */ }
}

MyCollection 的 set 访问器从未被调用或使用,但 TwoWay DataBinding 需要它。包含的 Model 类在构造时初始化 Collection,因为它需要将对象置于有效状态。有没有办法绕过这个不必要的访问器,或者有什么替代方法吗?

【问题讨论】:

  • 如果绑定是TwoWay,你需要一个set 访问器。如果您不需要访问器,则绑定应为OneWay

标签: c# wpf data-binding


【解决方案1】:

将 Mode=OneWay 设置为不需要设置。

【讨论】:

    【解决方案2】:

    如果双向绑定被双向使用,那么它正在被使用,只是你没有在代码中明确地使用它。据我所知,你无法绕过声明它。与声明任何读写属性相同。无论出于何种原因,您都必须将它们写成

    Public Type Property
    {
        get;
        set;
    }
    

    MS 不想让您太容易。 =)

    【讨论】:

    • 您希望如何声明一个读写属性?我发现这是迄今为止我见过的最简单的方法。
    • 我并没有反对它。我喜欢你不必声明一个底层变量,如果你不想,就像 VB。
    【解决方案3】:

    OneWay 与 Getter 相关,而 OneWayToSource 是 Setter。当然,TwoWay 关注的是 Getter 和 Setter。

    在观点上,如何像TextBox的Text一样改变View中DataGrid的ItemsSource?我认为这是不可能的,所以你不需要设置 TwoWay 绑定。更改为 OneWay 并删除 setter。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-17
      • 2021-07-29
      • 2012-06-14
      • 2014-12-24
      • 2011-04-07
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      相关资源
      最近更新 更多