我有一个WPF窗口,在该窗口中有一个网格。
我使用M-V-VM模型,并且想在代码中动态地将TextBox添加到网格中(在viewmodel中)
如何获得网格?
最佳答案
使用监督 Controller 模式。
阅读:
以下显示了CaliburnMicro MVVM框架的示例实现(对于所有其他框架都将起作用-如果您自己进行MVVM,则可以手工完成):
http://drc.ideablade.com/devforce-2012/bin/view/Documentation/cocktail-tutorial-talk-to-view
示例:
1)定义接口(interface)IView
,在其中ViewModel
(VM
)将使用所需方法与View
对话
public interface IView
{
void AddTextBoxToGrid();
}
2)从
View
继承IView
后面的代码,并实现IView.AddTextboxToGrid()
方法public partial class View: IView
{
public void AddTextBoxToGrid()
{
// implement here your custom view logic using standard code behind;
}
}
3)将
IView
类型的属性添加到VM
public class ViewModel
{
public IView View { get; set; }
}
4)将
View
的VM
属性设置为View
的实例作为IView
例如在后面的代码中: DataContext.View = this as IView;
或在Caliburn中,您可以使用IScreen.OnViewAttached覆盖方法)
public partial class View: IView
{
public View()
{
// access you VM by the strategy of your framework or choice - this example is when you store your VM in View's DataContext
(DataContext as ViewModel).View = this as IView;
}
public void AddTextBoxToGrid()
{
// implement here your custom view logic using standard code behind;
}
}
5)在您的
VM
中调用IView.AddTextboxToGrid()
public class ViewModel
{
public IView View { get; set; }
public void AddTextBoxToGrid()
{
if (View == null) return;
View.AddTextBoxToGrid()
}
}
关于c# - 如何在ViewModel的mvvm模型中访问控件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14236222/