c# - 从父 View xaml 设置子控件 View 模型的属性

标签 c# wpf mvvm

我想从父 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/

相关文章:

c# - 从服务器获取 Windows 登录名

wpf - HighlightBrushKey 设置在 Windows 7 中不起作用

.net - 如何将 WebBrowser 显示置于我的控制之下?

wpf色带完整教程

wpf - 在 WPF 中更改 View 时,ViewModel 中的文本框值未更新

c# - Application insights 读取响应正文

c# - 如何动态构建()=>新的{x.prop} lambda表达式?

c# - 是什么导致 Unity 内存泄漏?

c# - WPF XAML : The specified conversion is not valid 中不受控制的异常

c# - WPF 树数据模板取决于项目类型