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

标签 c# .net wpf xaml datatrigger

我有一个实现 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/

相关文章:

c# - 为什么从整数到字节的隐式转换不能与条件运算符一起使用?

c# - 使用 Async CTP 在单个函数中异步 HTTP 发布数据

wpf - 如何从代码隐藏中绑定(bind)属性,而其余属性则绑定(bind)到 DataContext?

C# (Xamarin) 框架覆盖中的 "async void"

c# - 谷歌认证获取用户头像

c# - Azure Blob 存储保存 Dto

c# - 如何签署 ClickOnce 应用程序

c# - wpf 中的自动完成框焦点

wpf - 从WPF的WebBrowser控件中保存图像-您该怎么做?

c# - MsTest 数据驱动 : ignore specific datarows via testattribute?