2013-02-01 48 views
1

我必須使用WCF服務從數據庫檢索值,並使用ID類型值填充名爲「類型」的下拉列表(使用可觀察集合來綁定此值)。如何根據WPF中的數據類型更改控制點

應該有另一個由數據模板/控件模板控制的控件,它將根據所選類型顯示。例如如果選擇了文本框類型,那麼文本框應該顯示一些默認值。

InputType文本框 - 這將用於在數據庫中創建新類型。使用保存按鈕保存值。

刪除按鈕 - 這應該從DataBase中刪除選定的類型。

我完成了DataBase Stuff和所有,但我應該如何更改控件取決於XAML中的數據類型?

回答

2

您可以使用一個通用ContentControl,其樣式將選擇(通過觸發器)包含相應控件類型的不同ControlTemplates。

此方法也可以稍微修改爲使用DataTemplates而不是ControlTemplates(可以說是更好的方法)。而不是設置模板屬性(這是一個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,View Model中的不同ICommand對象。我不知道你需要什麼樣的功能,所以我不知道這是否是必要/合適的。

希望有幫助!