Vadim_B Ответов: 0

Привязка между свойством зависимости пользовательского элемента управления и свойством родительской модели представления


У меня какой-то маленький вопрос. У меня есть 2 модели представления и 2 соответствующих представления. На первом представлении (пользовательский элемент управления) у меня есть флажок:

<UserControl x:Class="ZemaxWorks.UI.Views.DetectorViewer"
         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:controls="clr-namespace:ZemaxWorks.UI.Controls"/>
...
        <StackPanel Grid.Column="1" Grid.Row="1" HorizontalAlignment="Right" Orientation="Horizontal">
        <CheckBox x:Name="Scales" Style="{StaticResource CheckBoxBase}" Content="{x:Static res:Resource.DETECTOR_VIEWER_EQUAL_SCALES}"
                  IsChecked="{Binding ElementName=Scales, Path=EqualScales}"
                  />
    </StackPanel>
</Grid>


Затем я создаю собственность dependensy и привязать его к "этот флажок установлен" флажок собственность:

public partial class DetectorViewer : UserControl
{
    public bool EqualScales
    {
        get { return (bool)GetValue(EqualScalesProperty); }
        set { SetValue(EqualScalesProperty, value); }
    }

    // Using a DependencyProperty as the backing store for EqualScales.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty EqualScalesProperty =
        DependencyProperty.Register(nameof(EqualScales), typeof(bool), typeof(DetectorViewer));

    public DetectorViewer()
    {
        InitializeComponent();
    }
}


В главном окне у меня есть несколько вкладок,где нужно показать мой пользовательский элемент управления с флажком. Я описываю его по шаблону:

<views:ViewBase x:Class="ZemaxWorks.UI.Views.BeamSizeShowDataDialog"
             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"/>
...
<views:DetectorViewer Grid.Row="1" DataContext="{Binding}" EqualScales="{Binding DataContext.IsAllEqualScales, Mode=TwoWay, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"/>
...
</views:ViewBase>


В модели представления для этого представления я создаю свойство:

public bool IsAllEqualScales
        {
            get
            {
                return allEqualScales;
            }
            set
            {
                SetProperty(ref allEqualScales, value);
            }
        }


Но привязка не работает. Мне нужно привязать свойство зависимости от пользовательского элемента управления к свойству модели представления BeamSizeShowDataDialog с режимом TwoWay. Как нужно правильно это делать ?? Извините за некоторые ошибки в моем сообщении. Спасибо всем.

Что я уже пробовал:

Я попытался изменить код:

&ЛТ;элемент управления UserControl Х:класс="ZemaxWorks.Пользовательского интерфейса.Вид.DetectorViewer "xmlns:x=" #unknown " >
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
описание:х="http://schemas.microsoft.com/winfx/2006/xaml"
описание:МС="http://schemas.openxmlformats.org/markup-compatibility/2006"
описание:д="http://schemas.microsoft.com/expression/blend/2008"
описание:контролирует="среды CLR-пространство имен:ZemaxWorks.Пользовательского интерфейса.Управления"/&ГТ;
...
&ЛТ;элемент StackPanel сетки.колонка="1" сетки.строка="1" поле HorizontalAlignment="правая" ориентация="горизонтальный"и GT;
&ЛТ;флажок х:имя="Весы" стиль="{расширение StaticResource CheckBoxBase}" содержание="{х:статические РЭС:ресурс.DETECTOR_VIEWER_EQUAL_SCALES} " >
Этот флажок установлен="{привязки RelativeSource={RelativeSource поиска, AncestorType={х:тип UserControl}}, путь=EqualScales}"
/>


но это тоже не работа.

0 Ответов