【问题标题】:WPF ListView image depending on status columnWPF ListView 图像取决于状态列
【发布时间】:2011-07-18 16:07:33
【问题描述】:

我想在列表视图中显示一个图标而不是一个值。基本上,ListView 绑定到 ModelView-Class(作为其中的属性的 Observable-Collection)并有一个名为“status”的列。根据状态值,我想显示不同的图像。最好的方法是什么。我阅读了有关 DataTemplate 的信息,但我不知道在哪里挂钩代码以切换图像。

MV-Class 构造函数如下:

public TaskViewModel()
        {
            this.TaskCollection = ac.GetAllTasks();
        }

非常感谢,

亚当

【问题讨论】:

    标签: wpf image listview


    【解决方案1】:

    我会使用 DataTrigger。这是一个例子:

    <Style TargetType="{x:Type ListViewItem}">
        <Setter Property="Template" Value="{StaticResource DisabledImageTemplate}" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding Status}" Value="Active">
                <Setter Property="Template" Value="{StaticResource ActiveImageTemplate}" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
    

    【讨论】:

      【解决方案2】:

      如果您的图像路径/名称由后面的代码指定(这很糟糕,但有时会发生),您可以实现 IValueConverter 并将其命名为 StatusToIconConverter。请参阅here on MSDN 的简单示例。

      关于Data Templates 参见DataTemplateSelector 类。 Here is 也是一个非常简单的例子。 关键是要定义一个简单的类,它只分析传入的值并返回一个适当的数据模板,显然你必须为每个图像声明一个数据模板。

      【讨论】:

      • 是的,但是如何将它与我的 ViewModel-Class 挂钩?
      • ViewModel 不应该知道视图逻辑,所以它只是暴露状态。 DataTempalteSelector 中的视图根据 ViewModel 状态切换图像(DataTemplateSelector 应在方法 SelectTemplate(object item, ...) 中接收 ViewModel 实例作为参数
      猜你喜欢
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 2013-05-27
      • 2021-11-12
      • 2020-03-03
      • 1970-01-01
      相关资源
      最近更新 更多