2010-08-31 171 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

相关问题