Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每个Viewmodel实例化一个视图(相同类型的多个视图)_C#_Wpf_Mvvm_Data Binding_Wpf Controls - Fatal编程技术网

C# 每个Viewmodel实例化一个视图(相同类型的多个视图)

C# 每个Viewmodel实例化一个视图(相同类型的多个视图),c#,wpf,mvvm,data-binding,wpf-controls,C#,Wpf,Mvvm,Data Binding,Wpf Controls,是否有任何方法可以为每个Viewmodel实例化一个视图?我当前使用将视图应用于其Viewmodels <DataTemplate DataType="{x:Type vm:CustomerViewModel}"> <vw:CustomerView/> </DataTemplate> 但由于我的任务是让视图记住它们的焦点文本框的选择,我需要我的程序为每个Viewmodel创建一个视图,而不仅仅是更改DataContext 我已经为此搜索了整整两

是否有任何方法可以为每个Viewmodel实例化一个视图?我当前使用将视图应用于其Viewmodels

<DataTemplate DataType="{x:Type vm:CustomerViewModel}">
    <vw:CustomerView/>
</DataTemplate>

但由于我的任务是让视图记住它们的焦点文本框的选择,我需要我的程序为每个Viewmodel创建一个视图,而不仅仅是更改DataContext



我已经为此搜索了整整两周,我的问题是是否(以及如何)实例化相同类型的多个视图(而不是如何记住文本框选择):

视图模型应该包含选择的状态,该状态应该绑定到视图中。然后,
DataTemplate
就可以正常工作了。

我处理这个问题的方法是将我的ViewModel作为代码隐藏中xaml的输入。例如:

public partial class AddMember : Window
{
    StructureGeneratorVM mainVM = null;
    public AddMember(object vm)
    {
        mainVM = (StructureGeneratorVM)vm;
        DataContext = mainVM;
        InitializeComponent();
    }
}
然后,当我从基本窗口的VM打开窗口时,我传入
这个
,然后我程序中的所有窗口都在同一个VM上工作(它属于原始主窗口)


这就是你要问的吗?

谢谢你的建议,但我自己找到了解决办法。任何有类似问题的人;此链接将有所帮助:

谢谢你的想法,但我已经尝试过了。。。我的问题是是否可以实例化多个视图。。。老实说,我看不出有什么理由不这样做,因为这样做甚至不会显著影响绩效。我认为,这是非常迂回的,需要你跟踪所有的关联。这个想法很好,但我的问题与此不同:我的问题是WPF总是只创建一个视图类型的对象,然后在切换到视图的“另一个实例”时更改DataContext(有些人会怎么想)。如果有任何肮脏的技巧来改变我的问题将得到解决…当您创建视图的“另一个实例”时,将datacontext与创建一起传递?是的,当然。。。但是如何创建视图的另一个实例呢?如上所述,将视图应用于每个DataTemplate的Viewmodels时,只会创建一个视图对象,并且只会更改DataContext(而我想创建另一个视图),因此您是说不想共享Viewmodels。是否希望每个窗口都在独立的视图模型上工作?视图模型不是问题所在。我需要每个视图模型一个视图。因此,每个ViewModel都应该有自己的视图实例,并且该视图应该将其ViewModel作为DataContext。问题是WPF总是只生成一个视图的一个对象实例,如果一个视图应该有多个实例,例如在TabControl中,那么在创建新的ViewModel时它不会生成另一个视图(WPF知道如何将视图与ViewModels关联,因为DataTemplate)。它只改变了一个视图的DataContext,而您可能期望有多个视图。