WPFウィンドウがあり、そのウィンドウにグリッドがあります。
MV-VMモデルを使用しており、コード(viewmodel内)で動的にグリッドにTextBoxを追加したい
どうすればグリッドにアクセスできますか?
WPFウィンドウがあり、そのウィンドウにグリッドがあります。
MV-VMモデルを使用しており、コード(viewmodel内)で動的にグリッドにTextBoxを追加したい
どうすればグリッドにアクセスできますか?
監視コントローラーパターンを使用します。
読む:
CaliburnMicro MVVM フレームワークの実装例を次に示します (他のすべてのフレームワークでも同じように動作します - または、自分で MVVM を実行している場合は手動で実行できます)。
http://drc.ideablade.com/devforce-2012/bin/view/Documentation/cocktail-tutorial-talk-to-view
例:
1) ( ) が必要なメソッドと対話するインターフェースを定義します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()
}
}
作成コードを View に移動する必要があります。ViewModel は、呼び出す必要があるときにビューに通知するだけです。
ビューのコード ビハインドでビューの DataContext (ViewModel) を使用して、そこのグリッドにテキスト ボックスを追加することもできます。そのほうが理にかなっています。
XAML ファイルでグリッドに名前を付けると、コード ビハインドですぐにグリッドにアクセスできるようになります。