我有一个列表视图显示这个(或多或少):
--------------------------------------------------------
| Rule no. | Rule Type | Rule Name | Priority | Active |
--------------------------------------------------------
| 1 | 1 | My Rule | 1 | 1 |
--------------------------------------------------------
使用此XAML:
<ListView.View>
<GridView>
<GridViewColumn Header="Rule No" DisplayMemberBinding="{Binding Path=RuleNo}" Width="150" />
<GridViewColumn Header="Rule Type" DisplayMemberBinding="{Binding Path=RuleTypeNo}" Width="75">
<GridViewColumn.CellTemplate>
<DataTemplate>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=RuleTypeNo}" Value="1">
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Rule Name" DisplayMemberBinding="{Binding Path=RuleName}" Width="430"/>
<GridViewColumn Header="Priority" DisplayMemberBinding="{Binding Path=RulePriority}" Width="50"/>
<GridViewColumn Header="Active" Width="50">
<GridViewColumn.CellTemplate>
<HierarchicalDataTemplate>
<CheckBox Visibility="Visible" Name="chkActive" IsChecked="{Binding RuleActive}">
<TextBlock Text=" "/>
</CheckBox>
</HierarchicalDataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
我想要做的就是让RuleTypeNo列更改数据值
1
进入单词
应用
和值
2
进入单词
拨号
在listview单元格中以运行时直观显示。 E. g。如果列包含1,则显示单词,如果列包含2,则显示另一个单词。
这似乎几乎不可能,我现在已经花了大约9个小时。正如您所看到的,我尝试使用数据触发器来执行此操作,但它显然从未触发过。我尝试了各种setter,但是我要么不能让setter成为有效的标记,要么在listview显示时没有任何反应 - e。 G。触发器显然被忽略了。
我做错了什么?我进行了广泛的搜索,但似乎没有人想要解释单元格中的实际数据,通过触发器以另一种形式显示它 - 将数字转换为单词 - 每个人都想改变颜色,字体等 - 我不想更改样式,我想更改规则类型编号的单元格中的显示值...
如何将单元格中的可视显示值更改为XAML列表视图中同一单元格中的另一个显示值?我只想在视觉上将'1'解释为“App”并将'2'解释为“Dial”。
答案 0 :(得分:0)
您可以尝试创建ValueConverter来更改值。
将转换器包含在XAML的参考资料部分中:
<src:MyConverter x:Key="myConverter"/>
然后调整你的绑定:
<GridViewColumn DisplayMemberBinding="{Binding Path=RuleNo,
Converter={StaticResource myConverter}}}"/>
转换器看起来像:
[ValueConversion(typeof(int), typeof(String))]
public class MyConverter : IValueConverter
{
public object Convert(object value,
Type targetType,
object parameter,
CultureInfo culture)
{
int number = (int)value;
if (number == 1)
return "App";
if (number == 2)
return "Dial";
...
}
public object ConvertBack(object value,
Type targetType,
object parameter,
CultureInfo culture)
{
....
}
}
那就是说,我个人的偏好是揭露一个叫做例如关于你绑定的东西的RuleTypeDescription;而不是绑定到数字。
修改
如果你想用触发器做,你可以这样做:
<GridViewColumn Header="Thingy">
<GridViewColumn.CellTemplate>
<DataTemplate DataType="{x:Type WpfTests:Item}">
<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding MyNumber}" Value="1">
<Setter Property="Text" Value="One"/>
</DataTrigger>
<DataTrigger Binding="{Binding MyNumber}" Value="2">
<Setter Property="Text" Value="Two"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
请注意,我们没有将TextMemberBinding或绑定设置为TextBlock元素中的Text属性。