gpt4 book ai didi

wpf - 可以对复合对象的字段进行数据绑定(bind)吗?

转载 作者:行者123 更新时间:2023-12-03 10:16:20 25 4
gpt4 key购买 nike

我有一个 WPF 窗口,其中包含我希望绑定(bind)到我的模型的控件。模型实现 INotifyPropertyChanged 以在 Properties 更改值时通知 View 。属性是由字段支持的原语,例如:

private bool m_isRunning;
public bool IsRunning
{
get { return m_isRunning; }
private set
{
m_isRunning= value;
OnPropertyChanged("IsRunning");
}
}

protected virtual void OnPropertyChanged(string propertyName)
{
if (String.IsNullOrEmpty(propertyName))
{
return;
}
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}

这适用于原始值。我还有一个具有各种原始属性和哈希表的复合对象。或者,我想绑定(bind)到 ObservableCollection 的 Count 属性。我想将我的 View 控件绑定(bind)到复合对象中的属性,但我认为这是不可能的。就像是:
       <Run Text="{Binding Path=CompositeObject.SomeInnerProperty, Mode=OneWay,  UpdateSourceTrigger=PropertyChanged}" />

这似乎不可能,但是还有其他方法吗?我觉得我唯一的选择是公开映射到复合对象内部属性的属性,但这似乎有很多重复,例如:
public bool SomeInnerProperty
{
get { return m_myComposite.SomeInnerProperty; }
private set
{
m_myComposite.SomeInnerProperty= value;
OnPropertyChanged("SomeInnerProperty");
}
}

最佳答案

绑定(bind)到 CompositeObject.SomeInnerProperty 之类的东西没有任何问题, 但是如果 CompositeObject未实现 INotifyPropertyChanged ,那么您的 UI 将不会收到更改通知,并且知道它需要在 SomeInnerProperty 时更新变化。

另外,请注意,您只能绑定(bind)到属性(使用 get 和 set 方法),而不能绑定(bind)到字段。所以你可以绑定(bind)到public string SomeValue { get; set; }但你不能绑定(bind)到 public string SomeValue;
关于处理重复代码,我个人使用一些 Visual Studio macros为我编写我的公共(public)属性,所以如果你不想实现 INotifyPropertyChanged,也许你可以考虑做类似的事情在您的 CompositeObject 上类(class)。应该注意的是,宏已从 Visual Studio 2012 中删除,因此如果您有较新的版本,您可能需要使用其他替代方法,例如 creating an add-in to run your macros

关于wpf - 可以对复合对象的字段进行数据绑定(bind)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15748428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com