【问题标题】:Use another element's ItemsSource property in a MultiBinding在 MultiBinding 中使用另一个元素的 ItemsSource 属性
【发布时间】:2013-07-18 21:06:40
【问题描述】:

我想使用来自特定元素的ItemsSource 属性作为另一个元素的MultiBinding 中的绑定之一。到目前为止,这是我所拥有的:

<Label>
  <Label.Content>
    <MultiBinding Converter="{converters:myMultiValueConverter}">
      <Binding Path="PageIndex" />
      <Binding ElementName="anotherElement" Path="ItemsSource"/>
    </MultiBinding>
  </Label.Content> 
</Label>

这工作一次(当最初设置ItemsSource 时),但当绑定到原始元素的ItemsSource 属性的ObservableCollection 添加或删除项目时,绑定无法更新。这种绑定可以吗?

【问题讨论】:

  • 这听起来确实像是我宁愿在 ViewModel 级别解决的问题。你的myMultiValueConverter 是做什么的?
  • 同意@HighCore - 本质上,您将逻辑放入视图中 - 您应该将其提升到您的 ViewModel 并在那里处理。

标签: c# wpf xaml binding itemssource


【解决方案1】:

像这样添加一个虚拟绑定(-您不需要该值-)以强制重新评估 MultiBinding

<Binding ElementName="anotherElement" Path="ItemsSource.Count"/>

编辑: 刚刚注意到一个缺陷:如果您移动不会注册的项目,如果这不会更改其间的 Count 属性,那么这可能与您相关。在这种情况下,您可以绑定到您自己的虚拟对象,您可以在 CollectionChanged 上触发更改通知(尽管在任何情况下都不是那么干净)。

您可能需要考虑 HighCore 的建议,一个 get-only 属性返回计算值,您在它所依赖的所有地方手动触发 PropertyChanged 通常非常方便。

【讨论】:

  • 优秀,正是我需要的。在我的具体情况下,我不必担心物品会四处移动——它们只会被添加或移除。
猜你喜欢
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2018-10-18
  • 2020-10-13
  • 2015-03-23
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
相关资源
最近更新 更多