根据Collection中的值设置Icon

时间:2013-10-08 08:47:55

标签: c# wpf xaml mvvm viewmodel

我将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}" />

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

希望这是有道理的。

提前致谢

1 个答案:

答案 0 :(得分: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的列,您可以BindIcon.Visibility属性或自定义BoolToImageSourceConverter

  

我忽略了此示例的INotifyPropertyChanged界面。