MVVM如何在视图中获取ViewModel数据上下文

问题描述

当前,我的情况是我有一个Mainviewmodel,它像这样实例化MainTradingviewmodel ...

public partial class Mainviewmodel
{
    public MainTradingviewmodel MainTradingviewmodel = null;

    public Mainviewmodel()
    {
        MainTradingviewmodel = new MainTradingviewmodel();
    }
}

这就是我在MainWindow.xaml中创建MainTrading窗口的方式

    <view:MainTrading DataContext="{Binding MainTradingviewmodel}" />

现在的问题是我的MainTradingView类没有诸如...的数据上下文。

public partial class MainTrading : UserControl
{
    private MainTradingviewmodel vm = null;

    public MainTrading()
    {
        InitializeComponent();
        // I cant do this,since already instantiated in Mainviewmodel class
        //DataContext = new MainTradingviewmodel();
        //DataContext = ?????  so????
    }
}

从这里开始,我如何分配Datacontext以知道它是MainTradingviewmodel? 因为MainTradingviewmodel已经从另一个类实例化,所以我无法实例化一个新的类并分配给Datacontext,也无法更改代码作为参数传递。

我目前有一个解决方法,就是在类MainTrading中创建一个方法...

public partial class MainTrading : UserControl
{
    private MainTradingviewmodel vm = null;

    public MainTrading()
    {
        InitializeComponent();
        SetDataContext();
    }

    private void SetDataContext()
    {
        if (vm != null) return;
        vm = DataContext as MainTradingviewmodel;
    }

    public void SomeMethod()
    {
        // I have to call this on every new method in this class....
        SetDataContext();
        // ...
        vm.CallMyviewmodelMethod();
    }
}

但是这种解决方法的问题是我必须在每个方法调用SetDataContext(),因为似乎有一个竞争条件DataContext可以设置为null,所以我必须继续检查/设置它。 设置已经实例化视点模型的DataContext的最佳或正确方法是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)