C# 将WPF项控件项与另一个控件进行比较';触发器中的数据上下文
在我的C#/WPF/.NET 4.5应用程序中,我想实现一个触发器,用于切换驻留在ItemsControl的ItemTemplate内的控件的可见性 我有另一个名为TheWorkspace的控件。工作区的DataContext设置为填充my items控件的项之一。对于包含工作区数据上下文的项,我希望显示指示我们正在处理的项的文本 我需要一个触发器来比较项目的DataContext和工作区的DataContext,并相应地设置项目的可见性 项目模板:C# 将WPF项控件项与另一个控件进行比较';触发器中的数据上下文,c#,wpf,datatrigger,C#,Wpf,Datatrigger,在我的C#/WPF/.NET 4.5应用程序中,我想实现一个触发器,用于切换驻留在ItemsControl的ItemTemplate内的控件的可见性 我有另一个名为TheWorkspace的控件。工作区的DataContext设置为填充my items控件的项之一。对于包含工作区数据上下文的项,我希望显示指示我们正在处理的项的文本 我需要一个触发器来比较项目的DataContext和工作区的DataContext,并相应地设置项目的可见性 项目模板: <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>
不幸的是,这并没有达到预期效果
如何替换伪代码以指定完成此行为的触发器?我已使用多绑定和多值转换器解决了此问题: 项目模板:
<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]);
}
// ...
}