【问题标题】:Binding beyond the DataContext绑定到 DataContext 之外
【发布时间】:2011-10-17 13:34:38
【问题描述】:

我有一个 DataTemplate 用于模板化我的 ItemsControl 的项目,这些项目是 TimeSheet 的详细信息。 我有几个 TextBox 代表我的 TimeSheet 详细信息的某些值,但它们的 IsEnabled 属性取决于 TimeSheet 本身,而不是详细信息。

<ItemsControl 
   ItemsSource="{Binding Path=TimeSheet.TimeSheetDetails}"
   ItemTemplate="{StaticResource TimeSheetDetail}"
/>

<DataTemplate x:Key="TimeSheetDetail">
   <TextBox
      Text="{Binding Houre}"
      IsEnabled="Binding ??????">
</DataTemplate>

由于无法在 TimeSheetDetails 中找到 IsEnabled 属性,但可以在我的 ViewModel 中找到,我想直接绑定到我的 ViewModel 的属性,但是当我尝试从我的 DataTemplate 绑定到我的 ViewModel 时,它似乎只能查看我的 TimeSheetDetail。

如何直接访问我的 ViewModel 的公共属性?

【问题讨论】:

标签: c# wpf mvvm binding


【解决方案1】:

你可以绑定到你父母的DataContext:

{Binding DataContext.IsEnabled, 
         RelativeSource={RelativeSource FindAncestor, AncestorType=ItemsControl}}

【讨论】:

  • 非常有用,但你犯了一个小错误,它更像是 IsEnabled="{Binding DataContext.IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType=ItemsControl}}" 因为 TimeSheet 已经是 DataContext .
猜你喜欢
  • 2011-04-24
  • 2022-01-18
  • 2020-10-11
  • 2010-12-02
  • 2015-01-21
  • 2011-05-19
  • 2016-09-06
  • 2012-11-05
  • 1970-01-01
相关资源
最近更新 更多