我在UserControl上调用方法时遇到问题.听我说:
我someControl在SomeView.xaml中有一个UserControl
SomeView.xaml的DataContext是SomeViewModel.cs
我希望能够以someControl.DoStuff()某种方式在某个地方打电话.
DoStuff不是特定于UI的(我可以从SomeView.Xaml.Cs的代码隐藏中调用DoStuff,如果它是特定于UI的,但在这种情况下,它可能不是.)
有任何想法吗?
谢谢!
您可能不会喜欢这个答案,但您的ViewModel应该不了解您的UI.如果您的UserControl上有非UI方法,则可能位于错误的位置.
我唯一能想到的是你可能想要实现一些可能触发执行的消息传递(就像他们在MVVM Light中一样).
它要么是,要么重新考虑如何构建代码.
通过解耦 ViewModel 关于 View 的知识来实现此目的的一个答案是使用Mert 在这里回答的Action 委托
如果链接有任何问题,请将他的代码粘贴到此处。
class MyCodeBehind
{
public MyCodeBehind()
{
Action action = new Action(()=> this.SomeMethodIWantToCall());
var myVM = new MyVM(action); // This is your ViewModel
this.DataContext = myVM;
}
private void SomeMethodIWantToCall(){...}
}
class MyVM
{
private Action action;
public MyVM(Action someAction)
{
this.action = someAction;
}
private void SomeMethodInVM()
{
this.action(); // Calls the method SomeMethodIWantToCall() in your code behind
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8121 次 |
| 最近记录: |