使用单个源但不同的绑定模式的多个绑定目标

本文关键字:绑定 模式 目标 单个源 | 更新日期: 2023-09-27 18:30:58

我创建了一个自定义集合类,我正在尝试将其绑定到Silverlight中的两个不同的树视图。集合实现 INotifyCollectionChanged,集合包含的类型实现 INotifyPropertyChanged。GUI 上是一个位于两个树视图之间的数据网格。这是一个可以从左侧树视图拖动和操作项的区域。然后,更改将反映在第二个树视图中。第一个树视图应仅绑定一次,第二个树视图应在源发生更改时更新。但是,由于某种原因,对第一个树视图的一次性绑定似乎根本不起作用;树视图仍会更新。如果类型实现 INotifyCollectionChanged 或 INotifyPropertyChanged 时,OneTime 绑定是否有效?无法正常工作的树视图的标记与此类似。我删除了一些与该问题无关的细节。树视图的数据上下文设置为名为"客户端"的类型,例如_tv.DataContext = client 。每个客户端都有一个计划集合,每个计划又有一个分配集合。我正在为树视图使用分层数据模板。我忽略了什么吗?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>

使用单个源但不同的绑定模式的多个绑定目标

Plans的绑定实际上并没有改变,因为Plans实际上并没有改变。更改的是Plans的内容,因此OneTime指令不会禁止显示这些更改。