我想从父 View xaml 为子控件设置 View 模型的属性。
所以我希望父 xaml 是这样的:
<UserControl x:Class="MainUserControl"
...>
<Grid...>
<local:ChildDetailView x:Name="childView1" ChildVMProperty="ValueOptions.Option1"/>
<local:ChildDetailView x:Name="childView2" ChildVMProperty="ValueOptions.Option2"/>
</Grid>
</UserControl>
其中 ChildVMProperty 是 ChildDetailViewModel 上的属性(如果相关,则该属性采用 ValueOptions 类型的枚举)。
请注意,ViewModel 是在后面的代码中设置的(而不是在 xaml 中),因为实际上我在 ViewModel 中使用 DI 来注入(inject) prism 事件聚合器。
当我尝试做这样的事情时,xaml 会提示,因为它显然对 ChildViewModel 类一无所知。执行此操作的正确语法是什么,或者如果它不那么直接,我有什么选择来解决这个问题?
最佳答案
您需要先创建 ChildDetailView.xaml
文件。假设您将此文件放在命名空间 MyApp.Controls
,那么您上面的 XAML 将类似于
<UserControl x:Class="MainUserControl"
xmlns:local="clr-namespace:MyApp.Controls" >
<Grid ...>
<local:ChildDetailView x:Name="childView1" ChildVMProperty="ValueOptions.Option1"/>
<local:ChildDetailView x:Name="childView2" ChildVMProperty="ValueOptions.Option2"/>
</Grid>
</UserControl>
您必须确保拥有
DependencyProperty
(DP) ChildVMProperty
在您的 UserControl
上定义也 - 但这是另一个问题,关于该特定主题有很多答案。要为 View 添加 DP,您可能需要对您尝试定位的特定控件进行子类化。将 DP 用于属性的另一种方法是使用转换器。
我希望这有帮助。
关于c# - 从父 View xaml 设置子控件 View 模型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26157656/