35

WPFウィンドウがあり、そのウィンドウにグリッドがあります。

MV-VMモデルを使用しており、コード(viewmodel内)で動的にグリッドにTextBoxを追加したい

どうすればグリッドにアクセスできますか?

4

4 に答える 4

73

監視コントローラーパターンを使用します。

読む:

CaliburnMicro MVVM フレームワークの実装例を次に示します (他のすべてのフレームワークでも同じように動作します - または、自分で MVVM を実行している場合は手動で実行できます)。

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

例:

1) ( ) が必要なメソッドと対話するインターフェースを定義しますIViewViewModelVMView

public interface IView 
{
    void AddTextBoxToGrid();
}

2)あなたのコードビハインドを継承ViewIViewIView.AddTextboxToGrid()し、メソッドを実装する

public partial class View: IView 
{
    public void AddTextBoxToGrid() 
    {  
        // implement here your custom view logic using standard code behind; 
    }
}

3)タイプのプロパティIViewVM

public class ViewModel 
{
    public IView View { get; set; }
}

4)のインスタンスにプロパティを設定ViewVMViewIViewます 。たとえば、コード ビハインドで:

 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()
    }
}
于 2013-01-09T21:42:06.580 に答える
3

作成コードを View に移動する必要があります。ViewModel は、呼び出す必要があるときにビューに通知するだけです。

于 2013-01-09T20:52:25.043 に答える
0

ビューのコード ビハインドでビューの DataContext (ViewModel) を使用して、そこのグリッドにテキスト ボックスを追加することもできます。そのほうが理にかなっています。

XAML ファイルでグリッドに名前を付けると、コード ビハインドですぐにグリッドにアクセスできるようになります。

于 2013-01-09T14:31:24.513 に答える