Wpf 使用ViewModel的DataTemplate时,从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 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中传递视图/其控件之一。够清楚吗?