【发布时间】:2010-08-31 08:43:56
【问题描述】:
我有定义依赖属性的 DataDependentControl: TextVisibility、CalendarVisibility、ComboControlVisibility。 当我在具有枚举数据类型的外部组合框中选择一些值时,上述属性会更新为 Visibility 枚举值,但绑定不会更新内部控件上的 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 具有 DataType 属性。 根据 DataType 我通过以下属性隐藏或折叠子控件: ComboControlVisibility、CalendarVisibility 或 TextVisibility
DataDependentControl 中的DataType 属性定义如下:
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"/>
如果选择的数据类型是“DateTime”,应该是可见的
<Controls:Calendar/>
如果选择的数据类型是“布尔”,那么应该是可见的
<ComboBox/>
DataDependentControl 具有在组合框中定义的“DataType”属性。 “DataType”是数据绑定的:
<Views:DataDependentControl x:Name="typeValue"
DataType="{Binding SelectedItem, ElementName=DataTypes, Converter={StaticResource DataTypeReverseConverter}}"
【问题讨论】:
-
您能否也提供您的代码隐藏(带有依赖属性)?谢谢。
-
我更新了信息。谢谢。
-
描述有错误:“typeValue”不是组合框,而是定义了DataType属性的普通用户控件和子控件可见性根据DataType更新