我有一个UserControl在其构造函数中接受了几个参数。因为我现在绑定到ViewModel的集合,所以基于ViewModel加载UserControl的最佳方法是使用DataTemplate。
例如
<DataTemplate x:Key="ContentTemplate" DataType="{x:Type vm:WhiteboardVM}">
<local:WhiteboardUC />
</DataTemplate>
但是我仍然需要Usercontrol在初始化时获得参数。我怎样才能做到这一点?或者我有什么选择?
由于
答案 0 :(得分:1)
使用ObjectDataProvider
可以实现GUI元素的参数化构造,但不允许动态参数值,例如如果您希望传递项目特定的参数值,则无法在ItemsControl.ItemTemplate
中使用下面的数据模板! ...
<强> XAML:强>
<Window x:Class="LDAPAutocomplete.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:LDAPAutocomplete"
xmlns:System="clr-namespace:System;assembly=mscorlib"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<DataTemplate x:Key="MyContentTemplate">
<DataTemplate.Resources>
<ObjectDataProvider x:Key="MyUserControlProvider"
ObjectType="{x:Type local:MyButton}">
<ObjectDataProvider.ConstructorParameters>
<System:String>Test Me</System:String>
</ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>
</DataTemplate.Resources>
<ContentPresenter
Content="{Binding
Source={StaticResource MyUserControlProvider}}" />
</DataTemplate>
</Window.Resources>
<StackPanel>
<local:LDAPAutocompleteTextBox/>
<ContentControl
ContentTemplate="{StaticResource MyContentTemplate}"
Content="123"/>
</StackPanel>
</Window>
代码背后:
public class MyButton : Button
{
public MyButton(string content)
{
this.Content = content;
}
}