在我的C#/ WPF / .NET 4.5应用程序中,我想实现一个Trigger,它可以切换一个控件的可见性,该控件位于ItemConmplate的ItemsControl中。
我有另一个名为TheWorkspace的控件。 Workspace的DataContext设置为填充我的ItemsControl的项目之一。对于包含TheWorkspace的DataContext的项目,我想显示指示我们正在处理的项目的文本。
我需要一个触发器,将项目的DataContext与TheWorkspace的DataContext进行比较,并相应地设置项目的可见性。
ItemTemplate:
<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>
遗憾的是,这不符合预期。
如何替换伪代码以指定实现此行为的触发器?
答案 0 :(得分:0)
我使用 MultiBinding 和 MultiValueConverter 解决了这个问题:
ItemTemplate :
<DataTemplate>
<!-- ... -->
<TextBlock Text="This is the item we're working on.">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility"
Value="Hidden"/>
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource samenessConverter}">
<Binding ElementName="TheWorkspace"
Path="DataContext"/>
<Binding/>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Visibility"
Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<!-- ... -->
</DataTemplate>
MultiValueConverter :
public class SamenessConverter : IMultiValueConverter {
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) {
return values.All(x => x == values[0]);
}
// ...
}