WPF XAML listview-打开一个直观显示的';1';在一个单元格中转换为一个可视的显示字,在同一个单元格中同时显示
我有一个列表视图显示了以下内容(或多或少): 使用此XAML:WPF XAML listview-打开一个直观显示的';1';在一个单元格中转换为一个可视的显示字,在同一个单元格中同时显示,wpf,xaml,listview,Wpf,Xaml,Listview,我有一个列表视图显示了以下内容(或多或少): 使用此XAML: <ListView.View> <GridView> <GridViewColumn Header="Rule No" DisplayMemberBinding="{Binding Path=RuleNo}" Width="150" /> <GridViewColumn Header="Rule Type" DisplayMemberBinding="
<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列更改数据值
一,
进入世界
应用程序
价值呢
二,
进入世界
拨盘
在运行时在listview单元格中可视化。例如。如果列包含1,则显示一个单词;如果列包含2,则显示另一个单词
这看起来几乎是不可能的,我现在已经连续花了9个小时。正如您所看到的,我试图使用datatrigger来实现这一点,但它显然从未触发。我尝试了各种setter,但是我要么无法使setter成为有效的标记,要么在listview显示-e时什么也没有发生。G触发因素显然被忽略了
我做错了什么?我已经进行了广泛的搜索,但似乎没有人希望通过触发器解释单元格中的实际数据以另一种形式显示-将数字转换为单词-每个人都想更改颜色、字体等-我不想更改样式,我想更改单元格中规则类型数字的显示值
如何在XAML listview中将单元格中的可视显示值更改为同一单元格中的另一个显示值?我只想直观地将“1”解释为“App”,将“2”解释为“Dial”。您可以尝试创建一个来更改值
将转换器包括在XAML的参考资料部分,包括:
<src:MyConverter x:Key="myConverter"/>
也就是说,我个人的偏好是在你绑定的东西上公开一个名为RuleTypeDescription的新属性;而不是绑定到数字
编辑
如果要使用触发器,可以执行以下操作:
[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)
{
....
}
}
<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>
请注意,我们没有设置DisplayMemberBinding或绑定到TextBlock元素中的Text属性。Hi-Scroog1谢谢,这就破解了它!必须在引用转换器代码所在的Visual Studio项目文件夹的
标记中添加xmlns:src=“clr namespace:verdialclient.uihelper”
,然后在
中添加
[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)
{
....
}
}
<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>