【发布时间】:2020-03-02 17:12:58
【问题描述】:
处理以下情况的正确方法(MVVM)是什么?我们有一个窗口/用户控件,它承载了很少的用户控件和网格。当我们选择网格项时,SelectedItem="{Binding SelectedAccount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 正在更新用户控件上的SelectedAccount 属性
<TabItem Header="{x:Static p:Resources.Basic}">
<DockPanel>
<accounts:UCBasic x:Name="UCBasic" SelectedAccount="{Binding SelectedItem, ElementName=gridMain}"></accounts:UCBasic>
</DockPanel>
</TabItem>
<TabItem Header="{x:Static p:Resources.AdditionalData}">
<DockPanel>
<accounts:UCAdditionalData x:Name="UCAdditionalData" SelectedAccount="{Binding SelectedItem, ElementName=gridMain}"></accounts:UCAdditionalData >
</DockPanel>
... more user controls ...
</TabItem>
使用他们的DependencyProperty。现在,我将如何为上述用户控件 (UCBasic, UCAdditionalData) 编写 PageModel,以便他们可以根据来自网格的SelectedAccount 加载/显示更多数据。有使用属性更改事件的肮脏方式,但我认为不应该这样做。每个用户控件都有这个:
public Account SelectedAccount
{
get { return (Account)GetValue(SelectedAccountProp); }
set
{
SetValue(SelectedAccountProp, value);
}
}
public static readonly DependencyProperty SelectedAccountProp = DependencyProperty.Register("SelectedAccount", typeof(Account), typeof(UCBasic));
本质上,我将如何通知此用户控件 SelectedAccount 值已更改并且它应该自行更新(它自己的文本框、网格等)?
【问题讨论】:
-
您是说您的
SelectedAccount不起作用吗?因为如果是这样,您应该能够绑定到UserControl中的SelectedAccount的属性。或者在属性更改回调中做一些事情。