C# 将WPF项控件项与另一个控件进行比较';触发器中的数据上下文

C# 将WPF项控件项与另一个控件进行比较';触发器中的数据上下文,c#,wpf,datatrigger,C#,Wpf,Datatrigger,在我的C#/WPF/.NET 4.5应用程序中,我想实现一个触发器,用于切换驻留在ItemsControl的ItemTemplate内的控件的可见性 我有另一个名为TheWorkspace的控件。工作区的DataContext设置为填充my items控件的项之一。对于包含工作区数据上下文的项,我希望显示指示我们正在处理的项的文本 我需要一个触发器来比较项目的DataContext和工作区的DataContext,并相应地设置项目的可见性 项目模板: <DataTemplate>

在我的C#/WPF/.NET 4.5应用程序中,我想实现一个触发器,用于切换驻留在ItemsControl的ItemTemplate内的控件的可见性

我有另一个名为TheWorkspace的控件。工作区的DataContext设置为填充my items控件的项之一。对于包含工作区数据上下文的项,我希望显示指示我们正在处理的项的文本

我需要一个触发器来比较项目的DataContext和工作区的DataContext,并相应地设置项目的可见性

项目模板:

<DataTemplate>
  <Grid>
    <!-- ... -->
    <TextBlock Grid.Column="2"
               Text="This is the item we're working on."
               Visibility="Hidden">
      <TextBlock.Triggers>
        <!-- Pseudocode -->
        <DataTrigger Binding="{Binding TheWorkspace.DataContext}" Value="{Binding}">
        <!-- /Pseudocode -->
          <Setter Property="Visibility" Value="Visible" />
        </DataTrigger>
      </TextBlock.Triggers>
    </TextBlock>
  </Grid>
</DataTemplate>

不幸的是,这并没有达到预期效果


如何替换伪代码以指定完成此行为的触发器?

我已使用多绑定和多值转换器解决了此问题:

项目模板:

<DataTemplate>
  <Grid>
    <!-- ... -->
    <TextBlock Grid.Column="2"
               Text="This is the item we're working on."
               Visibility="Hidden">
      <TextBlock.Triggers>
        <!-- Pseudocode -->
        <DataTrigger Binding="{Binding TheWorkspace.DataContext}" Value="{Binding}">
        <!-- /Pseudocode -->
          <Setter Property="Visibility" Value="Visible" />
        </DataTrigger>
      </TextBlock.Triggers>
    </TextBlock>
  </Grid>
</DataTemplate>

看来你把它复杂化了。使用
列表框
,只需针对
IsSelected
触发即可。或者保留ItemsControl并向视图模型添加另一个属性,如“IsCurrent”。
public class SamenessConverter : IMultiValueConverter {
  public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) {
    return values.All(x => x == values[0]);
  }
  // ...
}