gpt4 book ai didi

c# - 从模型创建 ViewModel

转载 作者:行者123 更新时间:2023-12-03 10:46:03 26 4
gpt4 key购买 nike

我正在使用框架 Catel,并且我有一个带有 TabControl 的 View ,该 View 由 itemsource 提供。 TabContent 是使用 Datatemplate 完成的,其中包含命令。其中一个命令需要打开一个显示 TabContent 内容的新窗口。

我想做什么?我正在放置命令以在模型中打开新窗口(因为从 DataTemplate 你在模型上下文中)。命令被正确调用,但是,我无法从我的模型中引用 ViewModel 对象。

我将在这里编写我的代码的简短版本以更好地显示问题。

我的观点是:

...
<TabControl Grid.Column="2" ItemsSource="{Binding Plots}" >
...
<views:TabContent.Template>
<DataTemplate>
<Grid>
...
<DockPanel Grid.Column="0">
<ToolBarTray DockPanel.Dock="Left" Orientation="Vertical">
<ToolBar>
<Button Command="{Binding ShowAnotherWindow}">
<Image Source="{StaticResource GalleryPropertyImage}" />
</Button>
</ToolBar>
</ToolBarTray>
</DockPanel>

...
</Grid>
</DataTemplate>
</views:TabContent.Template>
</TabControl>
...

在我的模型中,我有命令 ShowAnotherWindow这是执行的,但我不能做类似的事情:
CompletePlotViewModel viewModel = new CompletePlotViewModel(this);

你建议我做什么?

最佳答案

即使绑定(bind)上下文是数据模板中的模型,将命令放在模型中仍然是非常错误的。它们应该存在于 View 模型中。

你可以做的是:

<TabControl x:Name="tabControl" Grid.Column="2" ItemsSource="{Binding Plots}" >

然后你可以使用这个绑定(bind):
<views:TabContent.Template>
<DataTemplate>
<Grid>
...
<DockPanel Grid.Column="0">
<ToolBarTray DockPanel.Dock="Left" Orientation="Vertical">
<ToolBar>
<Button Command="{Binding ElementName=tabControl, Path=DataContext.ShowAnotherWindow}" CommandParameter="{Binding }">
<Image Source="{StaticResource GalleryPropertyImage}" />
</Button>
</ToolBar>
</ToolBarTray>
</DockPanel>

...
</Grid>
</DataTemplate>
</views:TabContent.Template>

如您所见,它现在绑定(bind)到 上的 ShowAnotherWindow View 模型 .它将模型作为命令参数传递,因此您可以将其用作命令中的参数。

关于c# - 从模型创建 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25811488/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com