【问题标题】:Change value of parentProperty in child View - on change of property更改子视图中 parentProperty 的值 - 更改属性
【发布时间】:2013-04-12 15:30:11
【问题描述】:

类 ChildViewModel : ParentViewModel

class ParentViewModel 有 -> public string PropertyA;公共字符串PropertyB;

我有 2 个屏幕选项卡工作流程,一个用于父级,另一个用于子级(显然取决于父级数据)。 我想将 PropertyA 绑定到 childView 中的文本块,这样当我将 screentab 更改为 parentView 并修改 PropertyA 时,它应该自动反映在 childView 中。

我在 childViewModel 中定义了一个属性(排序伪):

public string PropA
get { return PropertyA; }
set
{
PropertyA = value;
OnPropertyChanged("PropertyA");
}

我也尝试过 UpdateSourceTrigger, Mode=twoway 视图中的属性 - WPF。

仍然无法更改属性。

欢迎提出任何建议......

【问题讨论】:

    标签: c# .net wpf data-binding


    【解决方案1】:

    如果 ChildViewModel 如您所示从 ParentViewModel 继承,那么您为什么会有第二个属性 PropA?为什么不直接将 ChildView 绑定到 ParentViewModel.PropertyA?

    我假设这不是实际继承,但您希望将 ParentViewModel 事件转发给 ChildViewModel。为此,您需要监听 ParentViewModel 的 PropertyChanged 事件...您可以通过...

    // listen to parentViewModel PropertyChanged events
    parentViewModel.PropertyChanged += HandleParentPropertyChangedEvents;
    

    如果您关闭或更改 ChildViewModel,请确保删除您的事件处理程序。

    在 ChildViewModel 中,您的处理程序将如下所示...

    private void HandleParentPropertyChangedEvents(object sender, PropertyChangedEventArgs e)
    {
        OnPropertyChanged(e.PropertyName);
    }
    

    这将重新触发子级上来自父级的任何 PropertyChanged 事件。在您的 ChildViewModel 事件处理程序中,您还可以根据需要过滤要转发的属性。

    【讨论】:

    • 这就是我最初绑定的方式:ParentViewModel.PropertyA 但这并不能反映我改回 childView 时的变化。
    • 那么 ParentViewModel 和 ChildViewModel 是两个不同的实例而不是同一个实例?如果是这样,那么我的答案应该适用于 ChildViewModel 监听 ParentViewModel 的 PropertyChanged 事件。
    • 好吧,我解决了这个问题。这真的是一个简单的修复。但是,您的帖子帮助我解决了与此问题无关的其他问题...因此未标记为答案...干杯!!
    猜你喜欢
    • 2017-09-07
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    相关资源
    最近更新 更多