【问题标题】:WPF set grid row to a dynamic XAML object using bindingWPF 使用绑定将网格行设置为动态 XAML 对象
【发布时间】:2011-02-26 02:57:50
【问题描述】:

我希望将 Grid 行(不是 DataGrid)的内容绑定到给定的 DataContext 属性。换句话说,我希望出现在的 UserControl,比如说……我的 Grid 的第 0 行,当 DataContext 属性 XX 从一个 UserControl 更改为另一个 UserControl 时发生变化。知道怎么做吗?

我想要实现的是一个松散耦合的 UI,由带有占位符的 Shell(主窗口)组成,但能够允许从任何占位符更改此类占位符的内容,如何?好吧,将一些占位符控件的命令绑定到 Shell DataContext 的命令(ShellViewModel),即按层次结构,不覆盖 DataContext 属性的任何占位符的所有控件的 DataContext,然后在此类命令的实现中更改 XX。

更具体地说,我希望我的应用程序的导航控件 (UI) 可以轻松更改而不会影响导航的语义,而我的新手在阅读了 MVVM 后唯一想到的就是上述方法。你有更好的主意吗?这是正确的还是太松散的耦合;)

我在第一次回复后添加了这部分:

数据模板不满足要求。为什么?好吧,很简单,使用数据模板,Shell 必须在前面知道将构成应用程序 UI 的 UI 元素的所有可能部分(通常采用 UserControls 形式的视图),这里的想法是避免这种情况。这个想法是有一个带有占位符的 Shell,并且 Shell 通过其 DataContext(Shell 的 ViewModel)将命令公开给将填充此类占位符的任何 UNKNOWN AT FRONT UI 组件。此类命令可以看作是一种用于与导航系统交互的 API/接口。

经过更多研究,我有了一个想法,所以一个答案可以是以下内容:

<ContentControl Grid.Row="0">
    <Binding Path="CurrentView"/>
 </ContentControl>

【问题讨论】:

    标签: wpf data-binding mvvm navigation


    【解决方案1】:

    我不确定我是否完全理解您的问题,但data template selector 可能就是您要找的。在您的情况下,返回的模板将根据当前的DataContext 进行更改,该模板将包含代表UserControl

    【讨论】:

    • 感谢您的回复,我在问题的末尾添加了一些关于为什么数据模板不在这里填写账单的说明。
    猜你喜欢
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2013-11-14
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多