WPF:在主窗口和用户控件中绑定元素
我是WPF和MVVM的新手,不知道如何解决这个(可能很简单)问题。我有一个带有两个区域的主窗口:RibbonView和下面的TabControl(Telerik)。我在ribbon控件中有一些大按钮,它们总是处于启用状态。例如,我有一个按钮“Tenants”,当我点击这个按钮时,我会创建一个新的选项卡项,并放置包含GridView控件的TenantControl(也来自Telerik)。其内容将自动加载 现在,我想让以下功能发挥作用:此外,我有一些默认禁用的小按钮(添加、删除、克隆等)(功能区控件),我想在网格中选择项目时启用这些按钮。使用路由命令是解决问题的正确方法吗?如果在自己的用户控件中选择网格中的项目,如何启用主窗口中的按钮?是的,在主窗口中,我有一个对用户控件的引用。不需要代码,只需要一个概念——正如我之前所说的,我是WPF/MVVM的新手 谢谢你的帮助和问候,WPF:在主窗口和用户控件中绑定元素,wpf,mvvm,binding,user-controls,command,Wpf,Mvvm,Binding,User Controls,Command,我是WPF和MVVM的新手,不知道如何解决这个(可能很简单)问题。我有一个带有两个区域的主窗口:RibbonView和下面的TabControl(Telerik)。我在ribbon控件中有一些大按钮,它们总是处于启用状态。例如,我有一个按钮“Tenants”,当我点击这个按钮时,我会创建一个新的选项卡项,并放置包含GridView控件的TenantControl(也来自Telerik)。其内容将自动加载 现在,我想让以下功能发挥作用:此外,我有一些默认禁用的小按钮(添加、删除、克隆等)(功能区控
Erno在我的WPF应用程序中,我也经常使用
RibbonBar
s,但不是为不同的视图创建不同的选项卡项
s,我使用ContentControl
将它们全部显示在一个位置,然后只需将Content
值更改为不同的视图模型,然后将这些视图模型渲染为相关视图:
在main视图中
:
<ContentControl Content="{Binding ViewModel}" />
在App.xaml中:
<DataTemplate DataType="{x:Type ViewModels:SomethingViewModel}">
<Views:SomethingView />
</DataTemplate>
此方法用于ICommand.CanExecute
属性,以根据加载的视图模型启用和禁用命令
s:
public ICommand CopyTrackList
{
get { return new ActionCommand(action => ClipboardManager.SetClipboardText(
((ReleaseLabelCopyViewModel)ViewModel).TrackList), canExecute =>
IsViewModelOfType<ReleaseLabelCopyViewModel>() &&
((ReleaseLabelCopyViewModel)ViewModel).SomePropertyInChildViewModel == true); }
}
公共ICommand CopyTrackList
{
获取{返回新操作命令(操作=>ClipboardManager.SetClipboardText(
((ReleaseLabelCopyViewModel)ViewModel).TrackList),canExecute=>
IsViewModelOfType()&&
((ReleaseLabelCopyViewModel)ViewModel).SomePropertyInChildViewModel==true);}
}
你好,谢里登,谢谢你的快速回复。我需要一些标签。每个控件都包含另一个用户控件,我需要从中访问功能区按钮的方法。如问题中所述,在用户控件中包含的网格中选择项目时,需要启用ribbon控件(主窗口中)中的按钮。在主视图中,我引用了不同的视图,这些视图进一步引用了viewmodels。谢谢,ErnoI编辑了我的上一个代码示例。。。现在,ICommand
的canExecute
部分检查当前是否加载了此特定视图模型,然后在启用RibbonBar
中的ICommand
之前,检查SomePropertyInChildViewModel
属性是否为true。您可以执行相同的操作,并从子视图模型中公开一个bool
属性,该属性表示是否在网格中选择了该项。此外,您不需要使用TabItem
s。。。您对TabItem
s所做的一切都是我对设置所做不到的。。。不过,这取决于您。我想您应该将命令放置在使用命令的视图中。这是否正确?这些ICommand
s在视图模型中声明,并通过数据绑定到按钮上的命令
属性和其他相关控件在视图中使用。您好,我找不到任何ActionCommand?还有一些其他类型的命令,如RoutedCommand/RoutedUICommand等,但没有像ActionCommand这样的命令。我找不到有关此操作类型的任何详细信息。。。
private bool IsViewModelOfType<T>()
{
return ViewModel != null && ViewModel.GetType() == typeof(T);
}
public ICommand CopyTrackList
{
get { return new ActionCommand(action => ClipboardManager.SetClipboardText(
((ReleaseLabelCopyViewModel)ViewModel).TrackList), canExecute =>
IsViewModelOfType<ReleaseLabelCopyViewModel>() &&
((ReleaseLabelCopyViewModel)ViewModel).SomePropertyInChildViewModel == true); }
}