Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# 在WPF中使用FrameworkElement.FindResource(“myResource”)_C#_Wpf_User Interface - Fatal编程技术网

C# 在WPF中使用FrameworkElement.FindResource(“myResource”)

C# 在WPF中使用FrameworkElement.FindResource(“myResource”),c#,wpf,user-interface,C#,Wpf,User Interface,在MVVM之后,我有一个持久化的对象,它存在一个UI窗口,对象是在XAML中定义的。此对象表示ModelView,因此它包含可以修改模型的控件。我发现自己正在为每个用户控件调用FrameworkElement.FindResource(“myResource”)。获取此对象实例的正确方法是什么 XAML: 代码隐藏: //对于我调用的每个控件: public void SomeEventHandler(对象_发送方,事件参数_someEventArgs){ MyModelView repea

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

XAML:


代码隐藏:

//对于我调用的每个控件:
public void SomeEventHandler(对象_发送方,事件参数_someEventArgs){
MyModelView repeatedCode=this.FindResource(“modelView”)
repeatedCode.DoSomeModificationRelatedControl(args[]someArgs);
}

如果需要在视图代码隐藏中的许多位置创建ViewModel,请在代码隐藏中的变量中创建并保留ViewModel,而不是将其作为Xaml中的资源创建。例如:

public partial class MainWindow : Window
{
    private MainViewModel _vm;

    public MainWindow()
    {
        InitializeComponent();

        _vm = new MainViewModel()
        {
            Name = "MyViewModel",
            ...
        };
        this.DataContext = _vm;
    }
最后一行很重要-通过使ViewModel成为视图的DataContext,您可以像普通一样在Xaml中绑定到它

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

public void SomeEventHandler(object sender, EventArgs someEventArgs)
{
    _vm.DoSomeModificationRelatedToControl(someArgs);
}

这听起来不像MVVM,你能给出一个具体的例子吗?所有的通信都是在视图和ModelView之间进行的,为什么你认为它听起来不像MVVM?下面是上面的代码。为什么要在视图中创建MyModelView实例并将其添加到资源中,为什么不能在上面的eventhandler所在的.cs类中直接使用它的实例,至少在这种情况下,您不必在资源中一次又一次地找到它。