绑定以依赖子类的可观察集合
Binding to count on observable collection of subclass
我这里有一个 WPF 绑定问题。
以下设置:
我确实有一个具有名称的 class (ActionService) 和一个子项的 ObservableCollection(还有一个名为 Step 的 class)。步骤有一个标志,显示该步骤是否已完成 (IsDone)。
我将表单绑定到 ActionService 并显示各种内容。
一切都按方面工作,我的代码片段中只有基本部分。
现在我还需要一件我无法工作的东西。我希望 ActionService 通过绑定其打开的步骤数 (IsDone == false) 来了解。如果您使用其中一个步骤打开子窗体并更改 IsDone-State,母窗体应该即时获得新的计数。
我太笨了,无法在途中找到正确的解决方案;-)
感谢您的帮助或最佳实践。
public class ActionService : BaseObject
{
public ActionService()
{
}
private String name;
public String Name
{
get { return this.name; }
set
{
this.name = value;
raisePropertyChanged("Name");
}
}
public ObservableCollection<Step> actionsteps;
public ObservableCollection<Step> ActionSteps
{
get { return this.actionsteps; }
set
{
this.actionsteps = value;
raisePropertyChanged("ActionSteps");
}
}
}
public class Step : BaseObject
{
public Step()
{
}
private String description;
public String Description
{
get { return this.description; }
set
{
this.description = value;
raisePropertyChanged("Description");
}
}
private Boolean isdone;
public Boolean IsDone
{
get { return this.isdone; }
set
{
this.isdone = value;
raisePropertyChanged("IsDone");
}
}
}
public class BaseObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void raisePropertyChanged(String parPropertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(parPropertyName));
}
}
}
您可以在 ActionService
class 中创建一个新的 属性:
public bool IsDone
{
get
{
return ActionSteps.Count(x => x.IsDone) == ActionSteps.Count;
}
}
如果 IsDone 属性 为真的 ActionSteps 列表中的步骤数等于 ActionSteps 列表中的步骤数,则 return 为真,否则, return false.
要订阅 Steps 属性 changed 事件,当您将项目添加到集合中时,您只需订阅 PropertyChanged 事件:
//Create the item and subscribe to propertychanged.
Step item = new Step();
item.PropertyChanged += item_PropertyChanged;
//Add the item to the list.
ActionSteps.Add(item);
您的方法将如下所示:
void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "IsDone")
raisePropertyChanged("IsDone");
}
我这里有一个 WPF 绑定问题。
以下设置:
我确实有一个具有名称的 class (ActionService) 和一个子项的 ObservableCollection(还有一个名为 Step 的 class)。步骤有一个标志,显示该步骤是否已完成 (IsDone)。
我将表单绑定到 ActionService 并显示各种内容。
一切都按方面工作,我的代码片段中只有基本部分。
现在我还需要一件我无法工作的东西。我希望 ActionService 通过绑定其打开的步骤数 (IsDone == false) 来了解。如果您使用其中一个步骤打开子窗体并更改 IsDone-State,母窗体应该即时获得新的计数。
我太笨了,无法在途中找到正确的解决方案;-)
感谢您的帮助或最佳实践。
public class ActionService : BaseObject
{
public ActionService()
{
}
private String name;
public String Name
{
get { return this.name; }
set
{
this.name = value;
raisePropertyChanged("Name");
}
}
public ObservableCollection<Step> actionsteps;
public ObservableCollection<Step> ActionSteps
{
get { return this.actionsteps; }
set
{
this.actionsteps = value;
raisePropertyChanged("ActionSteps");
}
}
}
public class Step : BaseObject
{
public Step()
{
}
private String description;
public String Description
{
get { return this.description; }
set
{
this.description = value;
raisePropertyChanged("Description");
}
}
private Boolean isdone;
public Boolean IsDone
{
get { return this.isdone; }
set
{
this.isdone = value;
raisePropertyChanged("IsDone");
}
}
}
public class BaseObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void raisePropertyChanged(String parPropertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(parPropertyName));
}
}
}
您可以在 ActionService
class 中创建一个新的 属性:
public bool IsDone
{
get
{
return ActionSteps.Count(x => x.IsDone) == ActionSteps.Count;
}
}
如果 IsDone 属性 为真的 ActionSteps 列表中的步骤数等于 ActionSteps 列表中的步骤数,则 return 为真,否则, return false.
要订阅 Steps 属性 changed 事件,当您将项目添加到集合中时,您只需订阅 PropertyChanged 事件:
//Create the item and subscribe to propertychanged.
Step item = new Step();
item.PropertyChanged += item_PropertyChanged;
//Add the item to the list.
ActionSteps.Add(item);
您的方法将如下所示:
void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "IsDone")
raisePropertyChanged("IsDone");
}