【问题标题】:Silverlight - rebinding to a property?Silverlight - 重新绑定到属性?
【发布时间】:2011-02-15 10:20:09
【问题描述】:

我刚刚开始使用 Silverlight。 基本上,我有一个 silverlight 用户控件,它具有各种 dataGrids 和一个组合框,它们的项目源设置为自定义纯 c# 对象的属性。 我的问题是我有一个下拉列表,当用户从列表中选择一个项目时,一个新行应该出现在其中一个网格中。 我所做的只是处理 SelectionChanged 事件并将新项目添加到我的自定义对象的列表中,并再次为网格设置 itemsource。这似乎不起作用;没有行被添加到 dataGrid 我不知道如何强制我的网格“重新绑定”到这个属性。 我一直在阅读依赖属性,这些是我需要的吗?

任何指针将不胜感激。

【问题讨论】:

    标签: silverlight binding dependency-properties


    【解决方案1】:

    您要绑定的列表应该是 ObservableCollection 类型。然后数据网格应该自动显示新项目。

    【讨论】:

      【解决方案2】:

      问题在于,当您将相同的列表分配给ItemsSource 时,DataGrid 知道它的相同列表,因此它什么也不做。

      正如 Henrik 指出的,对于要绑定到多项控件的 ItemsSource 属性的属性(例如 DataGridListBox 等),您应该公开 Observable<T> 而不是 List<T>

      此外,如果您希望代码对这些属性所做的更改自动显示在 UI 中,您的“普通 c# 对象”应实现 INotifyPropertyChanged 接口。

      【讨论】:

        【解决方案3】:

        您可能想要做的是更新绑定源 - 这相对容易完成。

        private void ComboBox_SelectionChanged(object sender, RoutedEventArgs e)
        {
            this.dataGrid.GetBindingExpression(DataGrid.ItemsSource).UpdateSource();
        }
        

        这是一个小技巧,但会做你需要做的事情。实现INotifyPropertyChanged 是另一个很好的建议。

        Silverlight show 在INotifyPropertyChanged here 上有一些很棒的信息

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-31
          • 1970-01-01
          • 1970-01-01
          • 2011-07-29
          • 2011-02-09
          • 1970-01-01
          • 1970-01-01
          • 2010-12-04
          相关资源
          最近更新 更多