1

我有一个数据网格,我的一列如下所示:

<DataGridTextColumn Binding="{Binding Path=BoolPropertyValue}" Header="YesOrNo" HeaderStyle="{DynamicResource MyHeaderStyle}" Width="auto">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="HorizontalAlignment" Value="Left" />
            <Setter Property="Margin" Value="3 5"/>
            <Setter Property="Text" Value="No"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=BoolPropertyValue}" Value="True">
                    <Setter Property="Text" Value="Yes"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

我要做的是在 BoolPropertyValue 分别为真或假时在该行的列中输入“是”或“否”。

BoolPropertyValue 是一个布尔属性。

不幸的是,这不起作用,它总是输入“真”或“假”。

我想在不需要转换器并且只使用 xaml 代码的情况下做到这一点。

我究竟做错了什么?

4

2 回答 2

2

我会使用 anIValueConverter而不是触发器(如果您真的愿意,可以使用触发器来完成,这是个人喜好)

BoolToYesNoConverter.cs:

public class BoolToYesNoConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
    {
        return (bool)value ? "Yes" : "No";
    }

    public object ConvertBack(object value, Type targetType,
           object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

XAML:

<DataGridTextColumn Binding="{Binding Path=BoolPropertyValue, Converter={StaticResource BoolToYesNoConverter}}" Header="YesOrNo" HeaderStyle="{DynamicResource MyHeaderStyle}" Width="auto">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="HorizontalAlignment" Value="Left" />
            <Setter Property="Margin" Value="3 5"/>
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

在资源中的某处(可能在App.xaml):

<local:BoolToYesNoConverter x:key="BoolToYesNoConverter" />
于 2017-09-19T17:13:49.907 回答
0

或者您可以修改单元格模板...

<DataGridTemplateColumn Header="YesOrNo" HeaderStyle="{DynamicResource MyHeaderStyle}" Width="auto">
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <TextBlock>
        <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
         <Setter Property="HorizontalAlignment" Value="Left" />
         <Setter Property="Margin" Value="3 5"/>
         <Style.Triggers>
            <DataTrigger Binding="{Binding Path=BoolPropertyValue}" Value="True">
                <Setter Property="Text" Value="Yes"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=BoolPropertyValue}" Value="False">
                <Setter Property="Text" Value="No"/>
            </DataTrigger>
         </Style.Triggers>
        </Style>
        </TextBlock.Style>
      </TextBlock>
    </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn >
于 2017-09-19T17:15:35.833 回答