【问题标题】:Multiple binding targets using a single source but different binding modes使用单个源但不同绑定模式的多个绑定目标
【发布时间】:2012-04-11 17:20:07
【问题描述】:

我创建了一个自定义集合类,我试图将其绑定到 Silverlight 中的两个不同的树视图。集合实现 INotifyCollectionChanged,集合持有的类型实现 INotifyPropertyChanged。 GUI 上有一个位于两个树视图之间的 DataGrid。这是一个可以从左侧树视图拖动项目并进行操作的区域。然后,更改会反映在第二个树视图中。第一个树视图应该只绑定一次,而第二个树视图应该在源发生更改时更新。然而,出于某种原因,第一个树视图上的 OneTime 绑定似乎根本不起作用。树视图仍然得到更新。如果类型实现 INotifyCollectionChanged 或 INotifyPropertyChanged,OneTime 绑定是否有效?无法正常工作的树视图的标记与此类似。我删除了一些与问题无关的细节。树视图的 DataContext 设置为名为 Client 的类型,例如,_tv.DataContext = client。每个客户都有一个计划集合,每个计划又都有一个分配集合。我正在为树视图使用 HierarchicalDataTemplate。我忽略了什么吗? INotifyPropertyChanged 和 INotifyCollectionChanged 已正确实现。我不认为这是一个逻辑问题。

<sdk:TreeView Name="_tv" ItemsSource="{Binding Plans, Mode=OneTime}">
  <sdk:TreeView.ItemTemplate>
    <sdk:HierarchicalDataTemplate ItemsSource="{Binding Allocations, Mode=OneTime}">
      <TextBlock Text="{Binding Name, Mode=OneTime}"/>
        <sdk:HierarchicalDataTemplate.ItemTemplate>
          <DataTemplate>
            <TextBlock>
              <Run Text="{Binding Fund.Allocations.Count}"></Run>
              <Run Text="{Binding Fund.Symbol}"></Run>
              <Run Text="{Binding Fund.Name}"></Run>
              <Run Text="{Binding Fund.AssetClass}"></Run>
            </TextBlock>
          </DataTemplate>
        </sdk:HierarchicalDataTemplate.ItemTemplate>
      </sdk:HierarchicalDataTemplate>
  </sdk:TreeView.ItemTemplate>
</sdk:TreeView>

【问题讨论】:

    标签: c# wpf silverlight


    【解决方案1】:

    Plans 的绑定实际上并没有改变,因为Plans 实际上并没有改变。 Plans内容 正在发生变化,因此 OneTime 指令不会抑制这些变化的显示。

    【讨论】:

    • 哦,我完全明白了。谢谢你。经过快速测试,我更好地意识到一次性绑定是如何工作的。一次性绑定会抑制对计划和分配本身的更改,但不会抑制对任一集合的添加,因为它们都实现了通知。我想我必须采取另一种方法来防止集合的更新出现在树视图中。
    猜你喜欢
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    相关资源
    最近更新 更多