C# 在WPF中使用FrameworkElement.FindResource(“myResource”)
在MVVM之后,我有一个持久化的对象,它存在一个UI窗口,对象是在XAML中定义的。此对象表示ModelView,因此它包含可以修改模型的控件。我发现自己正在为每个用户控件调用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
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类中直接使用它的实例,至少在这种情况下,您不必在资源中一次又一次地找到它。