我有一个菜单和一个TabbedGroup。当我单击其中一个菜单选项时,我想向TabbedGroup添加一个LayoutPanel。
我在MainWindow中有以下元素:
<view:UCMainMenu Grid.Row="1"/>
<dxdo:DockLayoutManager>
<dxdo:LayoutGroup Orientation="Horizontal">
<dxdo:TabbedGroup Name="MainTabbedGroup">
</dxdo:TabbedGroup>
</dxdo:LayoutGroup>
</dxdo:DockLayoutManager>
问题是菜单是一个有自己的ViewModel的UserControl。主窗口也有自己的ViewModel。我在Menu ViewModel的属性中创建了TabbedGroup,但我不知道如何将其绑定到MainWindow TabbedGroup元素。
我在UCMainMenu ViewModel中有一个TabbedGroup:
public TabbedGroup MainTabbedGroup { get; set; }
当我点击一个菜单选项时,我会向这个TabbedGroup添加一个LayoutPanel:
new TileViewModel()
{
Caption = "Menu View",
NavigateCommand = new DelegateCommand(() =>
{
LayoutPanel layoutPanel = new();
MainTabbedGroup.Add(layoutPanel);
})...
在主窗口中,我尝试将TabbedGroup绑定到ViewModel的Menu中的元素,但我得到一个错误:
((MainWindowViewModel)this.DataContext).Window = this;
((MainMenuViewModel)DataContext).MainTabbedGroup = this.MainTabbedGroup;
我得到这个错误:
System.InvalidCastException:“无法将类型”IntERP.App.ViewModels.MainWindowViewModel“的对象强制转换为类型”IntERP.App.ViewModels. MainMenuViewModel“。”
怎么绑定?
1条答案
按热度按时间cdmah0mi1#
首先,我建议您不要访问视图模型中的控件。这绕过了使用视图模型的全部原因。首先,它使测试视图模型变得更加困难。最好将此逻辑(添加到选项卡组)放在主窗口后面的代码中。
关于你的代码:你想把DataContext转换成MainMenuViewModel,而它是MainWindowViewModel。
你可以做什么:在XAML中执行绑定:
但是视图模型也不应该关心视觉树的改变。