2010-08-31 275 views
0

我有DataDependentControl與定義的依賴項屬性: TextVisibility,CalendarVisibility,ComboControlVisibility。 當我選擇在組合框以外的某些值具有枚舉數據類型,上述特性更新爲能見度枚舉值,但結合於內部控制不更新Visibility屬性:綁定不更新屬性

 <Views:DataDependentControl x:Name="typeValue"> 
      <StackPanel x:Name="container"> 
       <TextBox x:Name="TextBoxControl" Visibility="{Binding ElementName=typeValue, Path=TextVisibility, Mode=OneWay}"/> 
       <Controls:Calendar x:Name="CalendarControl" HorizontalAlignment="Left" Visibility="{Binding ElementName=typeValue, Path=CalendarVisibility}"/> 
       <ComboBox x:Name="ComboBoxControl" Visibility="{Binding ElementName=typeValue, Path=ComboControlVisibility}"/> 
      </StackPanel> 
     </Views:DataDependentControl> 

DataDependentControl具有數據類型屬性。 根據數據類型隱藏或通過以下性質塌陷子控件: ComboControlVisibility,CalendarVisibility或TextVisibility

字段類型字段內DataDependentControl屬性被定義爲如下:

public static readonly DependencyProperty DataTypeProperty = DependencyProperty.Register(
      DataTypePropertyName, 
      typeof (DataTypeEnum), 
      typeof (DataDependentControl), 
      new PropertyMetadata(ValueChangedCallback)); 

ValueChangedCallback函數定義如下:

private static void ValueChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
      var thisObject = (DataDependentControl)d; 
      var newValue = (DataTypeEnum) e.NewValue; 

      switch (newValue) 
      { 
       case DataTypeEnum.Bool: 
        thisObject.ComboControlVisibility = Visibility.Visible; 
        thisObject.CalendarVisibility = Visibility.Collapsed; 
        thisObject.TextVisibility = Visibility.Collapsed; 

....

例TextVisibility,CalendarVisibility或ComboControlVisibility的是在這裏:

public static readonly DependencyProperty TextVisibilityProperty = DependencyProperty.Register(
      TextVisibilityPropertyName, 
      typeof (Visibility), 
      typeof (DataDependentControl), 
      null); 

總而言之:

裏面的<StackPanel/>

如果選擇的數據類型是 「字符串」應該有可見的

<TextBox x:Name="TextBoxControl"/> 

如果選擇的數據類型是「日期時間」應該有可見

<Controls:Calendar/> 

如果選擇的數據類型是「布爾」應該有可見

<ComboBox/> 

DataDependentControl具有在組合框定義的「數據類型」屬性。 「數據類型」是數據綁定:

<Views:DataDependentControl x:Name="typeValue" 
             DataType="{Binding SelectedItem, ElementName=DataTypes, Converter={StaticResource DataTypeReverseConverter}}" 
+0

能否請您提供您的代碼隱藏(與依賴屬性)呢?謝謝。 – 2010-08-31 08:49:59

+0

我已更新信息。謝謝。 – Dmitry 2010-08-31 09:01:53

+0

描述中出現錯誤:「typeValue」不是組合框,但是定義DataType屬性和子控件的普通用戶控件可見性根據DataType更新 – Dmitry 2010-08-31 09:44:53

回答

0

我看來像你想你的依賴特性上ComboBox,即使它們是由您定義DataDependentControl。如果子控件的可見性與ComboBox的可見性相關聯,爲什麼不這樣做呢?

<Views:DataDependentControl x:Name="typeValue"> 
    <StackPanel x:Name="container"> 
     <TextBox x:Name="TextBoxControl" Visibility="{Binding Visibility, ElementName=typeValue}"/> 
     <Controls:Calendar x:Name="CalendarControl" HorizontalAlignment="Left" Visibility="{Binding Visibility, ElementName=typeValue}"/> 
     <ComboBox x:Name="ComboBoxControl" Visibility="{Binding Visibility, ElementName=typeValue}"/> 
    </StackPanel> 
</Views:DataDependentControl> 

,或者甚至更好:

<Views:DataDependentControl x:Name="typeValue"> 
    <StackPanel x:Name="container" Visibility="{Binding Visibility, ElementName=typeValue}"> 
     <TextBox x:Name="TextBoxControl"/> 
     <Controls:Calendar x:Name="CalendarControl" HorizontalAlignment="Left"/> 
     <ComboBox x:Name="ComboBoxControl"/> 
    </StackPanel> 
</Views:DataDependentControl> 
+0

我已在單詞「All in all」之後添加信息 可見性是選擇性的。不是所有的控件都應該可見或摺疊 – Dmitry 2010-08-31 09:17:28

+0

順便說一下,如果爲DataDependentControl中的每個子控件開發IValuConvertor,並將可見性數據綁定到外部組合框值,您的方式會很好。 – Dmitry 2010-08-31 09:25:38

+0

描述中出現錯誤:「typeValue」不是組合框,而是定義DataType屬性和子控件的普通用戶控件Visibility屬性根據DataType進行更新 – Dmitry 2010-08-31 09:51:24

相關問題