【问题标题】:WPF: binding elements in main window and user controlWPF:在主窗口和用户控件中绑定元素
【发布时间】:2014-08-22 09:26:46
【问题描述】:

我是 WPF 和 MVVM 的新手,不知道如何解决这个(可能很简单)问题。我有一个带有两个区域的 MainWindow:RibbonView 和下面的 TabControl(Telerik)。我在功能区控件中有大按钮,这些按钮始终处于启用状态。例如,我有一个“租户”按钮,当我单击此按钮时,我会创建一个新选项卡项并放置包含 GridView 控件(也来自 Telerik)的 TenantControl。它的内容是自动加载的。

现在我想让以下工作:另外,我有一些默认禁用的小按钮(添加、删除、克隆等)(功能区控件),我想在选择项目时启用这些按钮网格。使用路由命令是解决问题的正确方法吗?如果我在自己的用户控件中选择网格中的项目,如何在主窗口中启用按钮?是的,在主窗口中,我引用了用户控件。不需要代码,只需要一个概念——正如我之前所说,我对 WPF/MVVM 完全陌生。

感谢您的帮助和问候, 厄诺

【问题讨论】:

    标签: wpf mvvm binding user-controls command


    【解决方案1】:

    在我的 WPF 应用程序中,我也经常使用 RibbonBars,但我没有为不同的视图创建不同的 TabItems,而是使用 ContentControl 将它们全部显示在一个地方,然后只需更改Content 对不同视图模型的值,然后将其呈现为相关视图:

    Mainview:

    <ContentControl Content="{Binding ViewModel}" />
    

    ...

    MainViewModel:

    ViewModel = new SomethingViewModel();
    

    ...

    在 App.xaml 中:

    <DataTemplate DataType="{x:Type ViewModels:SomethingViewModel}">
        <Views:SomethingView />
    </DataTemplate>
    

    在我的MainViewModel 类中,我有一个辅助方法:

    private bool IsViewModelOfType<T>()
    {
        return ViewModel != null && ViewModel.GetType() == typeof(T);
    }
    

    此方法用于ICommand.CanExecute 属性中,用于根据加载的视图模型启用和禁用Commands:

    public ICommand CopyTrackList
    {
        get { return new ActionCommand(action => ClipboardManager.SetClipboardText(
            ((ReleaseLabelCopyViewModel)ViewModel).TrackList), canExecute => 
            IsViewModelOfType<ReleaseLabelCopyViewModel>() &&
            ((ReleaseLabelCopyViewModel)ViewModel).SomePropertyInChildViewModel == true); }
    }
    

    【讨论】:

    • 嗨,Sheridan,感谢您的快速回复。我实际上需要标签。它们每个都包含另一个用户控件,我需要从中访问功能区按钮的方法。如我的问题中所述,当我选择用户控件中包含的网格中的项目时,我需要启用功能区控件中的按钮(在主窗口中)。在主要的 wodow 中,我参考了进一步参考视图模型的不同视图。谢谢,厄诺
    • 我编辑了我的最后一个代码示例...现在ICommandcanExecute 部分检查当前是否已加载此特定视图模型,然后检查SomePropertyInChildViewModel 属性是否为真before 它启用RibbonBar 中的ICommand。您可以这样做并从您的子视图模型中公开一个 bool 属性,该属性表示该项目是否在您的 Grid 中被选中。此外,您不需要需要使用TabItems...您可以用TabItems 做任何事情,而我无法用我的设置来做...仍然,这取决于你。
    • 我想您将命令放在使用命令的视图中。这是正确的吗?
    • 这些ICommands 在视图模型中声明,并通过数据绑定到Buttons 上的Command 属性和其他相关控件在视图中使用。
    • 嗨,我找不到任何动作命令?还有一些其他类型的命令,如 RoutedCommand/RoutedUICommand 等,但没有像 ActionCommand 这样的命令。我找不到有关此操作类型的任何详细信息...
    猜你喜欢
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2013-12-13
    • 2011-01-23
    • 2016-10-03
    相关资源
    最近更新 更多