ObservableCollection条件计数

时间:2017-03-15 13:03:43

标签: c# wpf mvvm

我认为它应该很简单,但不能相信该怎么做。

我尝试在标签中绑定将其属性isWorking设置为True的对象的数量

这是我的收藏。

public readonly ObservableCollection<ComputerModel.ControleData> _ComputerList =
             new ObservableCollection<ComputerModel.ControleData>();
public ObservableCollection<ComputerModel.ControleData> ComputerList { get { return _ComputerList; } }

标签中我需要的结果就像

int workingItems= ComputerList.Where(x=> x.isWorking == true).Count()

然后在标签中绑定

<Label Content="{Binding workingItems}" HorizontalAlignment="Left" Margin="12,424,0,0" VerticalAlignment="Top" Height="22" Width="62"/>

但是这种工作的正确方法是什么?我不能在WPF本身有条件吗?

2 个答案:

答案 0 :(得分:2)

您可以创建仅限get属性

public int WorkingItems
{
    get { return ComputerList.Where(x=> x.isWorking == true).Count(); }
}

现在需要在INotifyPropertyChanged内的任何isWorking属性或列表本身发生更改时调用ComputerList的实施。

以下是一些伪代码,可让您了解需要考虑的内容,以便通知任何可能的更新。 不推荐也不完整来处理与此类似的通知。

ComputerList.CollectionChanged += (s, e) => NotifyPropertyChanged("WorkingItems");
this.PropertyChanged += (s, e) => { if (e.PropertyName == "ComputerList") NotifyPropertyChanged("WorkingItems"); };
foreach (var item in ComputerList)
{
    item.PropertyChanged += (s, e) => { if (e.PropertyName == "isWorking") NotifyPropertyChanged("WorkingItems"); };
}

答案 1 :(得分:0)

您无法绑定到字段但属性。因此,为workingItems创建一个属性,然后绑定到它:

public int WorkingItems
{
    get { return workingItems; }
    set { workingItems = value; }
}

int workingItems= ComputerList.Where(x=> x.isWorking == true).Count();

<Label Content="{Binding WorkingItems}" .... />