WPF将GridViewColumn绑定到不同的属性
问题描述:
我有一个WPF ControlTemplate包含一个ListView,它的ItemsSource绑定到我的类中的一个集合。WPF将GridViewColumn绑定到不同的属性
根据用户选择哪些选项我有时候想我GridViewColumn绑定到一个文本值,但有时我想不显示其他:
<GridViewColumn x:Name="DescriptionColumn" Header="{DynamicResource MyHeader}" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding MyText1}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
什么是去了解这一点的最好方法是什么?根据我显示的数据,我想要绑定到MyText1或MyText2。我如何制作'开关'?
答
做,这是一个multibinding的方式......
<GridViewColumn x:Name="DescriptionColumn" Header="{DynamicResource MyHeader}" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Style="{StaticResource TextBlockMultiValue}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
它使用以下资源...
<local:MultiValueConverter x:Key="MultiValueConverter"/>
<Style x:Key="TextBlockMultiValue" TargetType="TextBlock">
<Setter Property="Text">
<Setter.Value>
<MultiBinding Converter="{StaticResource MultiValueConverter}">
<Binding Path="MyText1"/>
<Binding Path="MyText2"/>
<Binding Path="Switch"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
和转换器是如下...
public class MultiValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if ((bool)values[2] == true)
return values[0].ToString();
else
return values[1].ToString();
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
因此,转换器根据转换器的第三个输入在一个字符串或另一个字符串之间进行选择。
答
你可以使用一个Style
与DataTrigger
:
<GridViewColumn x:Name="DescriptionColumn" Header="{DynamicResource MyHeader}" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding MyText1}" />
<Style.Triggers>
<DataTrigger Binding="{Binding TriggerProperty}" Value="2">
<Setter Property="Text" Value="{Binding MyText2}" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
在上面的TextBlock
的Text
财产样品标记将被绑定到“MyText2”当“TriggerProperty”返回“2”。