Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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
Wpf 使用ViewModel的DataTemplate时,从ViewModel中引用视图_Wpf_Datatemplate - Fatal编程技术网

Wpf 使用ViewModel的DataTemplate时,从ViewModel中引用视图

Wpf 使用ViewModel的DataTemplate时,从ViewModel中引用视图,wpf,datatemplate,Wpf,Datatemplate,我使用DataTemplate提供视图与ViewModel的关联,例如: <DataTemplate DataType="{x:Type viewModels:SomeViewModel}"> <views:SomeView /> </DataTemplate> 现在我需要在ViewModel中以某种方式引用视图,这样我就可以直接通过它的名称引用一些控件。 有什么办法吗 注意 我已经尝试将SomeView参数添加到SomeViewModel C

我使用DataTemplate提供视图与ViewModel的关联,例如:

<DataTemplate DataType="{x:Type viewModels:SomeViewModel}">
    <views:SomeView />
</DataTemplate>

现在我需要在ViewModel中以某种方式引用视图,这样我就可以直接通过它的名称引用一些控件。 有什么办法吗

  • 注意 我已经尝试将SomeView参数添加到SomeViewModel Ctor,但是SomeView Ctor被调用了两次(一次用于我发送到SomeViewModel Ctor的实例,另一次是因为框架的原因…)

谢谢你的帮助

也许这就是你想要的:

public partial class SomeView : UserControl
{
    public SomeView()
    {
        InitializeComponent();
        this.Loaded += View_Loaded;
    }

    void SomeView_Loaded(object sender, RoutedEventArgs e)
    {
        var someViewModel = (SomeViewModel)this.DataContext;
        someViewModel.View = this;
    }
}

如果要在ViewModel中引用视图,则不使用MVVM,我不建议这样做。如果您不能直接使用绑定,我将使用您的
SomeView
的codebehind文件来访问和更新基于ViewModel属性的控件,或者根据控件值更新ViewModel属性。请尝试在此处解释您的全部需要,以便我们可以使用MVVM方式为您提供更好的解决方案。如果您不想完全使用MVVM,那么只需捕获view onload事件,并在代码隐藏中设置“this.DataContext.SomeViewModelSomeProperty=this.WhateverControl”我知道这不再是MVVM当我尝试在viewmodel中引用视图时,有一种特殊情况需要将视图收紧到viewmodel,有办法吗?您具体想做什么?有一个内容控件,它根据当前视图模型显示视图。为了简化—假设我有两个按钮,当我按下第一个按钮时,它会创建viewmodel1并将其设置为contentcontrol内容dp,当我按下第二个按钮时,它会创建viewmodel2,依此类推。我的问题是,我别无选择,只能在一个视图中关联一个控件,但由于datatemplate正在视图和viewmodel之间进行关联,因此我无法在viewmodel的ctor中传递视图/其控件之一。够清楚吗?