C# 基于WPF网格中的条件设置列文本值

C# 基于WPF网格中的条件设置列文本值,c#,wpf,C#,Wpf,我有一个整数值(0,1,2),我需要分别将文本显示为“Error,Forward,Reverse” 我可以使用GridViewDataColumn的setter属性在form.xaml中实现这一点吗?如果可以,其他值是什么。 这里对于数据列,我们必须将绑定定义为DataMemberBinding=“{binding Direction}”,其中'Direction'是UInt16,并且此Direction属性是可观察集合的一部分。因此,对于每次更改,我都需要相应地将数据显示为字符串 我只是将网格

我有一个整数值(0,1,2),我需要分别将文本显示为“Error,Forward,Reverse”

我可以使用GridViewDataColumn的setter属性在form.xaml中实现这一点吗?如果可以,其他值是什么。 这里对于数据列,我们必须将绑定定义为
DataMemberBinding=“{binding Direction}”
,其中'Direction'是UInt16,并且此Direction属性是可观察集合的一部分。因此,对于每次更改,我都需要相应地将数据显示为字符串

我只是将网格中的列定义为

<telerik:GridViewDataColumn DataMemberBinding="{Binding Direction}" UniqueName= "Direction" Header="Direction" Width="85" TextAlignment="Left"  HeaderTextAlignment="Center" DisplayIndex="9" IsFilteringDeferred="True" >


我如何添加触发器来实现这一点?

您可以使用DataTrigger/IValueConvertor来实现

DataTrigger:

 <Style.Triggers>
      <!-- 1st trigger -->
      <DataTrigger Binding="{Binding Path=Direction}" Value="0">
        <Setter Property="Text" Value="Error"/>
      </DataTrigger>
      <!-- 2nd trigger -->
      <DataTrigger Binding="{Binding Path=Direction}" Value="1">
        <Setter Property="Text" Value="Forward"/>
      </DataTrigger>
      <!-- 3rd trigger -->

  <DataTrigger Binding="{Binding Path=Direction}" Value="2">
    <Setter Property="Text" Value="Reverse"/>
  </DataTrigger>

</Style.Triggers>
<telerik:GridViewDataColumn Header="Direction" >
      <telerik:GridViewDataColumn.CellTemplate>
             <DataTemplate>
                      <TextBlock Text="{Binding Direction, Converter={StaticResource IntoToDataConvertor}, Mode=Default}"  />
             </DataTemplate>
      </telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>

转换器:

 <telerik:GridViewDataColumn DataMemberBinding="{Binding Direction,Convertor={StaticResource InttoDateConverter }" UniqueName= "Direction" Header="Direction" Width="85" TextAlignment="Left"  HeaderTextAlignment="Center" DisplayIndex="9" IsFilteringDeferred="True" >


public class InttoDateConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, 
                System.Globalization.CultureInfo culture)
        {
            switch (value.ToString().ToLower())
            {
                case "0":
                    return "Error!";
                case "1":
                    return "Forward";

                default:
                    return "Reverse";
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, 
                System.Globalization.CultureInfo culture)
        {
           // only for two way binding
        }
    }

公共类InttoDateConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、,
System.Globalization.culture(信息文化)
{
开关(value.ToString().ToLower())
{
案例“0”:
返回“错误!”;
案例“1”:
返回“向前”;
违约:
返回“反向”;
}
}
公共对象转换回(对象值、类型targetType、对象参数、,
System.Globalization.culture(信息文化)
{
//仅适用于双向装订
}
}
数据网格列绑定:

 <Style.Triggers>
      <!-- 1st trigger -->
      <DataTrigger Binding="{Binding Path=Direction}" Value="0">
        <Setter Property="Text" Value="Error"/>
      </DataTrigger>
      <!-- 2nd trigger -->
      <DataTrigger Binding="{Binding Path=Direction}" Value="1">
        <Setter Property="Text" Value="Forward"/>
      </DataTrigger>
      <!-- 3rd trigger -->

  <DataTrigger Binding="{Binding Path=Direction}" Value="2">
    <Setter Property="Text" Value="Reverse"/>
  </DataTrigger>

</Style.Triggers>
<telerik:GridViewDataColumn Header="Direction" >
      <telerik:GridViewDataColumn.CellTemplate>
             <DataTemplate>
                      <TextBlock Text="{Binding Direction, Converter={StaticResource IntoToDataConvertor}, Mode=Default}"  />
             </DataTemplate>
      </telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>


您可以通过多种方式实现这一点。转换器、触发器或ViewModel中的附加属性。很难向您推荐最佳解决方案,因为您没有发布code@lokusking根据你的评论编辑了我的问题。我还没有写任何关于这方面的代码。如何使用触发器来完成此操作?已尝试使用以下代码进行转换
xmlns:custom=“clr namespace:MyForm;assembly=“>
方法被调用,但文本未按预期更改。我缺少的是什么?您可以最后一个解决方案DataGridColumn直接将不支持转换器。定义celltemplate然后重试itUsing Style选项也出现了一些错误,因为Style不是GridviewDataColumn的属性。。这是否也需要对工作进行任何其他更改?