Edw*_*uay 5 data-binding wpf mvvm
在我看来,我有这个:
<TextBlock Text="{Binding Title}"/>
Run Code Online (Sandbox Code Playgroud)
它绑定到我的ViewModel的Title属性,这很简单,效果很好:
private string _title;
public string Title
{
get
{
return _title;
}
set
{
_title = value;
OnPropertyChanged("Title");
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我的ViewModel还具有属性"FormFields",它是一个包含许多其他UserControl的StackPanel:
private StackPanel _formFields;
public StackPanel FormFields
{
get
{
return _formFields;
}
set
{
_formFields = value;
OnPropertyChanged("FormFields");
}
}
Run Code Online (Sandbox Code Playgroud)
如何从我的视图中绑定它?
在ASP.NET中有一个PlaceHolder元素,我正在寻找具有相同功能的东西,例如
PSEUDO代码:
<PlaceHolder Content="{Binding FormFields}"/>
Run Code Online (Sandbox Code Playgroud)
Ken*_*art 18
首先,不要.您应该指示数据(模型),而不是从VM中指定UI.换句话说,属性类型应该是ObservableCollection<FormField>.然后您的视图将绑定如下:
<ItemsControl ItemsSource="{Binding FormFields}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
这通常在.Resources父元素的部分中定义.即Window.Resources或WrapPanel.Resources.
话虽如此,您可以使用a ContentPresenter抓取StackPanel并将其粘贴在可视化树中:
<ContentPresenter Content="{Binding FormFields}"/>
Run Code Online (Sandbox Code Playgroud)