我有一个WPF窗口,在该窗口中我有一个网格。
我使用MV-VM模型,我想一个文本框在代码中动态添加到网格(在视图模型)
我怎样才能接入电网?
我有一个WPF窗口,在该窗口中我有一个网格。
我使用MV-VM模型,我想一个文本框在代码中动态添加到网格(在视图模型)
我怎样才能接入电网?
使用监督控制器模式。
读:
例如实施CaliburnMicro MVVM框架如下所示(将努力同所有其他框架-或者你可以通过手,如果你正在做MVVM自己做这件事):
http://drc.ideablade.com/devforce-2012/bin/view/Documentation/cocktail-tutorial-talk-to-view
例:
1) 定义接口IView
其中ViewModel
( VM
)会跟View
与所需的方法(S)
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代码例如=此作为IVIEW; 或卡利可以使用IScreen.OnViewAttached覆盖方法)
public partial class View : IView
{
public View()
{
// access you VM by 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()
}
}
你应该将你创建代码视图,视图模型应该只是通知视图时,它应该被称为。
您也可以使用View的DataContext的(这是视图模型)在视图背后的代码,然后将文本框添加到网格那里。 这会更有意义。
如果你给电网在你的XAML文件的名称,你就能立即背后访问网格中的代码。
如果您使用的卡利微,执行以下步骤:
使视图模型从接口继承IViewAware
; 你要实现此接口的两种方法AttachView和GetView。
定义类型视图的变量获得参考查看
请参见下面的细节:
private SomeViewClass v; public void AttachView(object view, object context = null) { v = view as BomView; if (ViewAttached != null) ViewAttached(this, new ViewAttachedEventArgs() { Context = context, View = view }); } public object GetView(object context = null) { return v; }
以后你可以到V如v.txtName =“约翰”在查看访问单个元素; 等等...