WPF将GridViewColumn绑定到不同的属性

时间:2017-04-18 17:51:40

标签: wpf xaml listview binding

我有一个WPF ControlTemplate,它包含一个ListView,它的ItemsSource绑定到我的类中的一个集合。

根据用户选择的选项,我有时想将GridViewColumn绑定到一个文本值,但有时我想显示另一个:

<GridViewColumn x:Name="DescriptionColumn" Header="{DynamicResource MyHeader}" >
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding MyText1}"/>        
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

最好的方法是什么?根据我显示的数据,我想要绑定到MyText1或MyText2。如何制作&#39;开关&#39;?

2 个答案:

答案 0 :(得分:0)

这样做的方法是使用多重绑定......

                <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();
    }
}

因此,转换器根据转换器的第三个输入在一个字符串或另一个字符串之间进行选择。

答案 1 :(得分:0)

您可以将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>

一起使用
Text

在上面的示例标记中,当“TriggerProperty”返回“2”时,TextBlock的{​​{1}}属性将绑定到“MyText2”。