gpt4 book ai didi

silverlight-5.0 - 银光 : Parent ViewModel Property value to Child ViewModel property

转载 作者:行者123 更新时间:2023-12-02 05:04:01 25 4
gpt4 key购买 nike

我在 Silverlight 论坛上发布了这个问题,但未能得到解决我的问题的答案,所以我希望 SO 的专家能提供帮助!

基本上我的父 View 模型中有一个实体属性。当这个实体发生变化时,我需要我的 subview 模型中实体的 ID。我创建了一个具有依赖属性的子控件,并在构造函数中创建了一个绑定(bind)。我正在尝试使用 MVVM 和 MEF 实现所有这些。

我的父 View 模型:

[ExportPlugin(ViewModelTypes.ParentViewModel, PluginType.ViewModel)]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class ParentViewModel: ViewModelBase
{
private Person _currentPerson;
public Person CurrentPerson
{
get { return _currentPerson; }
private set
{
if (!ReferenceEquals(_currentPerson, value))
{
_currentPerson= value;
RaisePropertyChanged("CurrentPerson");
}
}
}
}

我的父用户控件:

<UserControl x:Class="MyApp.ParentUserControl" x:Name="ParentControl">
<local:ChildUserControl PersonID="{Binding ElementName=ParentControl, Mode=TwoWay, Path=DataContext.CurrentPerson.ID}" />
</UserControl>

我的 ChildUserControl 代码隐藏:

public partial class ChildUserControl : UserControl
{
#region Private Properties
private PluginCatalogService _catalogService = PluginCatalogService.Instance;
#endregion

#region Dependency Properties
public static readonly DependencyProperty PersonIDProperty =
DependencyProperty.Register("PersonID", typeof(int), typeof(ChildUserControl), new PropertyMetadata(OnPersonIDChanged));
#endregion

#region Public Properties
public int PersonID
{
get { return (int)GetValue(PersonIDProperty); }
set { SetValue(PersonIDProperty, value); }
}
#endregion

#region Constructor
public ChildUserControl()
{
InitializeComponent();

if (!ViewModelBase.IsInDesignModeStatic)
this.DataContext = _catalogService.FindPlugin(ViewModelTypes.ChildViewModel, PluginType.ViewModel);

this.SetBinding(PersonIDProperty, new Binding("PersonID") { Mode = BindingMode.TwoWay, Source = DataContext, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged });
}
#endregion

private static void OnPersonIDChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
...
}

我的 ChildViewModel:

[ExportPlugin(ViewModelTypes.ChildViewModel, PluginType.ViewModel)]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class ChildViewModel: ViewModelBase
{
private int _personID;
public int PersonID
{
get { return _personID; }
set
{
if (!ReferenceEquals(_personID, value))
{
_personID= value;
RaisePropertyChanged("PersonID");
}
}
}
}

我创建了 OnPersonIDChanged 事件以查看当 CurrentPerson 实体更改时,更改是否在 ChildControl 中被拾取,它是。它只是没有在 ChildControl ViewModel 中被拾取。

非常感谢任何帮助。

最佳答案

最好,如果您使用 PRISM,您可以使用 EventAggregator...见http://msdn.microsoft.com/en-us/library/ff921122(v=pandp.40).aspxhttps://compositewpf.codeplex.com/

另一种选择是 Hook (破解)PropertyChanged

ViewModel1.PropertyChanged += (s, e) =>
{
if (e.PropertyName == "XXX")
{
ViewModel2.PropertyX = vm1.PropertY;
}
};

关于silverlight-5.0 - 银光 : Parent ViewModel Property value to Child ViewModel property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13721794/

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