Silverlight 装订不';不要更新属性

Silverlight 装订不';不要更新属性,silverlight,data-binding,Silverlight,Data Binding,我已定义了依赖项属性的DataDependentControl: 文本可见性、日历可见性、ComboControlVisibility。 当我在带有枚举数据类型的外部组合框中选择一些值时,上面提到的属性将更新为可见性枚举值,但绑定不会更新内部控件的可见性属性: <Views:DataDependentControl x:Name="typeValue"> <StackPanel x:Name="container">

我已定义了依赖项属性的DataDependentControl: 文本可见性、日历可见性、ComboControlVisibility。 当我在带有枚举数据类型的外部组合框中选择一些值时,上面提到的属性将更新为可见性枚举值,但绑定不会更新内部控件的可见性属性:

        <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>
ValueChangedCallback功能定义如下:

public static readonly DependencyProperty DataTypeProperty = DependencyProperty.Register(
            DataTypePropertyName,
            typeof (DataTypeEnum),
            typeof (DataDependentControl),
            new PropertyMetadata(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;

文本可见性、日历可见性或ComboControlVisibility的示例如下所示:

public static readonly DependencyProperty TextVisibilityProperty = DependencyProperty.Register(
            TextVisibilityPropertyName,
            typeof (Visibility),
            typeof (DataDependentControl),
            null);
总而言之:

内:

如果所选数据类型为“字符串”,则应显示

<TextBox x:Name="TextBoxControl"/>
<Controls:Calendar/>
<ComboBox/>

如果所选数据类型为“DateTime”,则应显示

<TextBox x:Name="TextBoxControl"/>
<Controls:Calendar/>
<ComboBox/>

如果所选数据类型为“布尔”,则应显示

<TextBox x:Name="TextBoxControl"/>
<Controls:Calendar/>
<ComboBox/>

DataDependentControl具有在combobox中定义的“DataType”属性。“数据类型”是数据绑定的:

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

在我看来,您似乎正在尝试在一个
组合框上定义依赖项属性,即使它们是由您的
数据依赖项控件定义的。如果子控件的可见性与组合框的可见性相关,为什么不这样做呢

<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>


您能否同时提供代码隐藏(以及依赖项属性)?谢谢。我有最新的信息。谢谢。说明中有一个错误:“typeValue”不是组合框,但定义DataType属性和子控件可见性的公共用户控件根据DataTypeI更新。我在“All in All”之后添加了信息。可见性是选择性的。并非所有控件都应可见或折叠顺便说一句,如果为DataDependentControl内部的每个子控件开发IValuConvertor并将可见性数据绑定到combobox值外部,您的方法会更好。说明中出现错误:“typeValue”不是combobox,但定义数据类型属性和子控件可见性属性的公共用户控件会根据数据类型进行更新