我如何才能获得在视图模型MVVM模型控制?(How can i access a control i

2019-07-18 00:45发布

我有一个WPF窗口,在该窗口中我有一个网格。

我使用MV-VM模型,我想一个文本框在代码中动态添加到网格(在视图模型)

我怎样才能接入电网?

Answer 1:

使用监督控制器模式。

读:

例如实施CaliburnMicro MVVM框架如下所示(将努力同所有其他框架-或者你可以通过手,如果你正在做MVVM自己做这件事):

http://drc.ideablade.com/devforce-2012/bin/view/Documentation/cocktail-tutorial-talk-to-view

例:

1) 定义接口IView其中ViewModelVM )会跟View与所需的方法(S)

public interface IView 
{
    void AddTextBoxToGrid();
}

2) 继承代码隐藏ViewIView和实施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到的实例ViewIView在后面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()
    }
}


Answer 2:

你应该将你创建代码视图,视图模型应该只是通知视图时,它应该被称为。



Answer 3:

您也可以使用View的DataContext的(这是视图模型)在视图背后的代码,然后将文本框添加到网格那里。 这会更有意义。

如果你给电网在你的XAML文件的名称,你就能立即背后访问网格中的代码。



Answer 4:

如果您使用的卡利微,执行以下步骤:

  1. 使视图模型从接口继承IViewAware ; 你要实现此接口的两种方法AttachView和GetView。

  2. 定义类型视图的变量获得参考查看

  3. 请参见下面的细节:

     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 =“约翰”在查看访问单个元素; 等等...



文章来源: How can i access a control in mvvm model in viewmodel?