我正在尝试通过 mvvm 模式中的绑定而不是隐藏代码向网格控件添加一个子元素。
查看代码:
<Grid Name="grid">
</Grid>
Run Code Online (Sandbox Code Playgroud)
背后代码:
public MainWindow()
{
InitializeComponent();
AddControl();
}
private void AddControl()
{
Viewer viewer = new Viewer();
grid.Children.Add(viewer.GetUIElement());
}
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,但我想在虚拟机中通过绑定而不是代码隐藏来完成此操作。请注意,在上面的代码中,Viewer 是第三方控件,它通过后面的代码完美地添加到网格中。我想使用绑定动态地将查看器控件添加到网格中。
并不总是需要有网格控件。它可以是任何控件,例如父控件/托管控件/内容控件。只有一个子控件,即 Viewer。
我有 ICommand、INotifyPropertyChanged、依赖属性等绑定的基本知识,但现在知道如何将任何控件(在我的例子中为 Viewer)添加到另一个父控件(在我的例子中为 Grid)。
代码可能如下:View和VM通过DataContext绑定
查看代码:
<ContentControl Content="{Binding MyControl}"></ContentControl>
Run Code Online (Sandbox Code Playgroud)
虚拟机代码:
class VM
{
Viewer view;
public VM()
{
view = new Viewer();
}
public Viewer MyControl
{
get {return view; }
set{view= value;}
}
}
Run Code Online (Sandbox Code Playgroud)