我认为它应该很简单,但不能相信该怎么做。
我尝试在标签中绑定将其属性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本身有条件吗?
答案 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}" .... />