我有一个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)ViewVM属性设置为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/

10-09 17:38