gpt4 book ai didi

wpf - 如何支持具有相同 View 模型的多个 View ?

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

使用 的最佳方式是什么?相同 viewmodel 支持多个 View ?

(是的..我已阅读“MVVM(使用 WPF)-将多个 View 绑定(bind)到 SameViewModel”,但如果我阅读正确,答案涉及创建不同的 View 模型,这不是我想要在这里做的)。

在下面的代码中,当 InkStringView 包含已定义的行时,StringViewModel 支持 InkStringView。我现在希望定义由列组成的第二个 View ,但必须保持与 StringViewModel 相同的数据上下文。在第二个 View 中,控件具有 不同 StringViewModel 计算的位置和大小,但它们的功能和目的保持不变。如果在 Strings(一个 observablecollection)中创建 StringViewModels 的模块不知道将使用哪个 View ,将最终决定留给用户控件的 xaml,那将是理想的。

我的问题是如何设计 StringViewModel 和/或 DataTemplate 以通过仅更改 DataTemplate 来允许基于该 View 的不同 View 和计算。

(我尝试将 StringViewModel 继承到不同的 View 模型,每个 View 模型都特定于其 View ,但它不起作用)。

提前感谢您的任何帮助或建议。还是他们有更好的方法?

例子:

<DataTemplate DataType="{x:Type vm:StringViewModel}">
<v:InkStringView_2 /> <----CHANGING THE VIEW TO COLUMNS. ViewModel needs
</DataTemplate> to perform calculations specific to the view.

用户控件是:
<UserControl.Resources>
<DataTemplate DataType="{x:Type vm:StringViewModel}">
<v:InkStringView />
</DataTemplate>
</UserControl.Resources>

<Grid>
<ItemsControl
ItemsSource="{Binding Strings}" >
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Control.Margin" Value="{Binding Margin}"/>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</Grid>
</UserControl>

最佳答案

只是一个建议:

你有一个 View 模型 MyViewmodel,你想用不同的 DataTemplates 显示它。那么对我来说,一个简单的方法是创建“没有”实现的"new"类

 public class MyT1 : MyViewmodel {}
public class MyT2 : MyViewmodel {}
public class MyT3 : MyViewmodel {}

所以现在所有的 MyT1、MyT2、MyT3 都有相同的方法和东西,但是你可以为它们中的每一个创建一个数据模板
   <DataTemplate DataType="{x:Type vm:MyT1}">
<v:T1View />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:MyT2}">
<v:T2View />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:MyT3}">
<v:T3View />
</DataTemplate>

或者您不采用 Viewmodel First 方法并执行 View First ,然后您可以使用 Datacontext 选择您想要的 View

关于wpf - 如何支持具有相同 View 模型的多个 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25800958/

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