我必须使用WCF服务从DB中检索值,并使用ID-Type值填充名为“Type”的下拉列表(使用observable collection来绑定它)。
应该有另一个由数据模板/控制模板控制的控件,它将根据所选的类型显示。例如如果选择了TextBox类型,则TextBox应显示一些默认值。
InputType文本框 - 这将用于在DB中创建新类型。使用“保存”按钮可以保存值。
删除按钮 - 这应该从数据库中删除所选的类型。
我完成了DataBase Stuff和所有,但我应该如何根据XAML中的数据类型更改控制?
答案 0 :(得分:2)
您可以使用一般ContentControl,其样式将选择(通过触发器)包含适当控件类型的不同ControlTemplates。
这种方法也可以稍加修改,以使用DataTemplates而不是ControlTemplates(可以说是更好的方法)。不要设置Template属性(这是一个ControlTemplate),而是设置ContentTemplate属性(这是一个DataTemplate)并用你想要的控件填充每个DataTemplate。
<Window x:Class="ControlTypeBasedOnComboBox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<ComboBox Grid.Row="0"
ItemsSource="{Binding Path=ControlTypes}"
x:Name="ControlTypeComboBox"/>
<ContentControl Grid.Row="1">
<ContentControl.Style>
<Style TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=ControlTypeComboBox, Path=SelectedItem}" Value="TextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContentControl">
<TextBox/>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=ControlTypeComboBox, Path=SelectedItem}" Value="CheckBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContentControl">
<CheckBox/>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=ControlTypeComboBox, Path=SelectedItem}" Value="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContentControl">
<Button/>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</Grid>
代码隐藏:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new ViewModel();
}
}
视图模型:
public class ViewModel
{
ObservableCollection<string> controlTypes;
public ViewModel()
{
controlTypes = new ObservableCollection<string>() { "TextBox", "CheckBox", "Button" };
}
public ObservableCollection<string> ControlTypes
{
get { return controlTypes; }
}
}
对于保存/删除按钮,您还可以根据ComboBox的SelectedItem将Command属性绑定到View Model上的不同ICommand对象。我不知道你需要什么样的功能,所以我不知道这是否必要/适当。
希望有所帮助!