0

在 MVVM 之后,我有一个对象持续存在一个 UI 窗口,该对象是在 XAML 中定义的。该对象代表 ModelView,因此它包含可以修改模型的控件。我发现自己需要FrameworkElement.FindResource("myResource")每个用户控件。获取该对象实例的正确方法是什么?

XAML:

<p:MyModelView x:Key="modelView" />

代码隐藏:

//for every control I call:
public void SomeEventHandler(object _sender, EventArgs _someEventArgs) {
    MyModelView repeatedCode= this.FindResource("modelView")
    repeatedCode.DoSomeModificationRelatedToControl(args[] someArgs);
}
4

1 回答 1

1

如果您的 View 代码隐藏中有很多地方需要 ViewModel,请创建 ViewModel 并将其保存在代码隐藏中的变量中,而不是将其创建为 Xaml 中的资源。例如:

public partial class MainWindow : Window
{
    private MainViewModel _vm;

    public MainWindow()
    {
        InitializeComponent();

        _vm = new MainViewModel()
        {
            Name = "MyViewModel",
            ...
        };
        this.DataContext = _vm;
    }

最后一行很重要 - 通过使 ViewModel 成为 View 的 DataContext,您可以像往常一样在 Xaml 中绑定到它。

现在,您的事件处理程序至少缩短一两行:

public void SomeEventHandler(object sender, EventArgs someEventArgs)
{
    _vm.DoSomeModificationRelatedToControl(someArgs);
}
于 2013-01-19T00:36:21.383 回答