gpt4 book ai didi

c# - WPF:如何使用数据触发器(或等效项)交换 Listview 单元格内容

转载 作者:行者123 更新时间:2023-11-30 16:36:45 25 4
gpt4 key购买 nike

我有一个实现 ListView 的 WPF 应用程序。我想根据该行代表的数据类型在其中一列中显示一个图像(一个小图标)。有点像您在 Windows 资源管理器中看到的显示。

我在我的 XAML 中的其他地方使用 DataTriggers,似乎可以使用类似的方法来换出整个单元格内容,但我找不到任何人这样做的例子。

有什么想法吗?

最佳答案

这有三种常用技术。

1) 数据触发器:

<DataTemplate x:Key="ImageColumn">
<Grid>
<Image x:Name="img" Source="MyImage.png"/>
<Rectangle x:Name="rect" Fill="Red" Visibility="Hidden"/>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding TriggerProperty}" Value="2">
<Setter TargetName="rect" Property="Visibility" Value="Visible"/>
<Setter TargetName="img" Property="Visibility" Value="Hidden"/>
</DataTrigger>
<!--etc...-->
</DataTemplate.Triggers>
</DataTemplate>

2) 值转换器:

public class MyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string strVal = value as string;
switch (strVal)
{
case "2":
Rectangle rect = new Rectangle();
rect.Fill = Brushes.Red;
return rect;

default:
Image img = new Image();
ImageSourceConverter s = new ImageSourceConverter();
img.Source = (ImageSource)s.ConvertFromString("MyImage.png");
return img;
}
}
}

3) MVVM(模型- View - View 模型):

创建一个包装数据模型的 ViewModel 类。此 ViewModel 将计算数据模型中的属性并将它们与逻辑组合成一个新属性。

public UIElement Icon
{
get
{
if (TriggerProperty == "2")
{
Rectange rect = new Rectangle();
rect.Fill = Brushes.Red;
return rect;
}

else
{
Image img = new Image();
ImageSourceConverter s = new ImageSourceConverter();
img.Source = (ImageSource)s.ConvertFromString("MyImage.png");
return img;
}
}
}

XAML:

<DataTemplate x:Key="ImageColumn">
<ContentControl Content="{Binding Icon}"/>
</DataTemplate>

关于c# - WPF:如何使用数据触发器(或等效项)交换 Listview 单元格内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/395663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com