У меня есть 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
DataType свойство в 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"/>
Если выбран тип данныхв «DateTime» должно быть видимым
<Controls:Calendar/>
Если выбранный тип данных «Boolean», то должно быть видимым
<ComboBox/>
DataDependentControl имеет свойство «DataType», которое определено в выпадающем списке.DataType связан с данными:
<Views:DataDependentControl x:Name="typeValue"
DataType="{Binding SelectedItem, ElementName=DataTypes, Converter={StaticResource DataTypeReverseConverter}}"