В настоящее время я работаю над проблемой пользовательского элемента управления UserControl. Я хочу предоставить определенные свойства дочерних элементов управления в качестве свойств родительского элемента, а также хочу, чтобы привязка данных была возможной.Чтобы все это произошло, я создал Attached DependencyProperties на родительском объекте:
//TimeframeSelector.xaml.cs
public static readonly DependencyProperty EnableEndFilterProperty =
DependencyProperty.RegisterAttached(
"EnableEndFilter",
typeof(bool),
typeof(TimeframeSelector),
new FrameworkPropertyMetadata(false,
FrameworkPropertyMetadataOptions.Inherits |
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public static bool GetEnableEndFilter(DependencyObject obj)
{
return (bool)obj.GetValue(EnableEndFilterProperty);
}
public static void SetEnableEndFilter(DependencyObject obj, bool value)
{
obj.SetValue(EnableEndFilterProperty, value);
}
public bool EnableEndFilter
{
get { return (bool)GetValue(EnableEndFilterProperty); }
set { SetValue(EnableEndFilterProperty, value); }
}
Эти присоединенные DP используются в xaml этого элемента управления:
//TimeframeSelector.xaml
<UserControl x:Class="EveTrader.Wpf.Controls.TimeframeSelector"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ctrl="clr-namespace:EveTrader.Wpf.Controls"
mc:Ignorable="d">
<CheckBox IsChecked="{Binding
Path=(ctrl:TimeframeSelector.EnableEndFilter),
RelativeSource={RelativeSource Self}, Mode=TwoWay}"/>
</UserControl>
Теперь используется элемент управленияв другом элементе управления:
<ctrl:TimeframeSelector EnableEndFilter="{Binding ApplyEndFilter}" [...]/>
ViewModel для этого представления предоставляет значение из пользовательских настроек, которое корректно отображается в элементе управления, но любые изменения, внесенные в элемент управления, не возвращаются в ViewModel.
Итак, вопрос в том, как заставить работать контроль в обоих направлениях?Что-то уже должно работать, иначе элемент управления будет пустым (как это было до того, как я добавил флаг Inherits в DP).