【问题标题】:Set Icon based on value from Collection根据集合中的值设置图标
【发布时间】:2013-10-08 08:47:55
【问题描述】:

我将Grid 绑定到一个集合,而集合内部是另一个集合。

如果第二个集合有任何值,我想在网格行中显示一个图标。

在 WPF 中执行此操作的最佳方法是什么? 目前我正在绑定一个名为HasValues 的属性,该属性会检查集合。但这不适用于整个系列。

    public bool HasValues
    {
        get
        {
            if (this.Collection.SubCollection.Any() &&
                this.Collection.SubCollection.First() != null &&
                this.Collection.SubCollection.Any())
            {
                return true;
            }

            return false;
        }
    }

xaml 看起来像这样

<Custom:CustomGridIconButton Icon="{StaticResource ShowIcon}" 
    Visibility="{Binding HasValues}" />

但我想做的是基于网格中的索引检查该索引是否在子集合中具有值...

希望这是有道理的。

提前致谢

【问题讨论】:

  • 上传你的Grid的xaml代码...
  • 为什么要检查this.Collection.SubCollection.Any() 两次?

标签: c# wpf xaml mvvm viewmodel


【解决方案1】:

如果您将bool 属性添加到外部集合中的任何数据类型,那么它可以反映其内部集合中是否包含任何值。当然,我不知道你的实际数据类型,因为你没有向我们展示它们,所以我只能在这里做出假设——我相信你可以将这个想法应用于你自己的数据类型:

带有内部集合的外部集合类:

public class Outer
{
    public ObservableCollection<int> InnerItems { get; set; }

    public bool HasItems  // <<< Add bool property next to inner collection
    {
        return Inner != null && InnerItems.Count > 0;
    }
}

外部集合属性:

public ObservableCollection<Outer> OuterItems { get; set; }

在 XAML 中:

<DataGrid ItemsSource="{Binding OuterItems}" />

现在,对于外部集合中的每个项目,您将拥有一个名为 HasItems 的列,您可以将其 Bind 添加到 Icon.Visibility 属性或自定义 BoolToImageSourceConverter

我在这个例子中忽略了INotifyPropertyChanged 接口。

【讨论】:

    猜你喜欢
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多