WPF RelativeSource Не удается найти ресурс

Я использую WPF для создания пользовательского элемента управления, мне нужно получить свойство, которое определено в коде пользовательского элемента управления, поэтому я использовал RelativeSource, но я получаю эту ошибку

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.UserControl', AncestorLevel='1''. BindingExpression:Path=LeftColumnHeader; DataItem=null; target element is 'ExtDataGridComboBoxColumn' (HashCode=47761); target property is 'Header' (type 'Object')

Мой код XAML (вложенное дерево):

<UserControl x:Class="Administration.Views.UserRoleView"
         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:WPFCtrlDg="clr-namespace:WPFControls.DataGrids;assembly=WPFControls"
         xmlns:WPFCtrl="clr-namespace:WPFControls;assembly=WPFControls"
         xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">

<UserControl.Resources>

    <CollectionViewSource x:Key="AllItemsView" Source="{Binding Path='AllitemsList'}" />

</UserControl.Resources>

<Grid>


    <GroupBox Grid.Row="0" Grid.Column="0" Header="Assigned Elements">
        <WPFCtrlDg:SelfBindingDataGrid x:Name="_sbgAssigned" ScrollViewer.VerticalScrollBarVisibility="Auto"
                     ItemsSource="{Binding Path=Assigned}"
                     SelectedItem="{Binding Path=CurrentAssignedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
            <WPFCtrlDg:SelfBindingDataGrid.Columns>
                <WPFCtrlDg:ExtDataGridComboBoxColumn Header="{Binding Path=LeftColumnHeader,
                                                         RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}},
                                                          Mode=OneWay, 
                                                          UpdateSourceTrigger=PropertyChanged}" 
                                                          Width="*"/>

Внутри кода пользовательского контроля я определил свою собственность

  private string _leftColumnHeader = "TEST";
    public string LeftColumnHeader
    {
        get { return _leftColumnHeader; }
        set { _leftColumnHeader = value; }
    }
}

Любая идея о том, как получить мое свойство, чтобы использовать его в качестве функции заголовка моего столбца сатагрид? спасибо Андреа

2 ответа

Решение

Используйте либо

RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserRoleView}},
                Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"

Или добавьте это в свой UserControl:

<UserControl
    Name="myControl"
...

Тогда вместо использования RelativeSource используйте привязку следующим образом:

Header={Binding Path=LeftColumnHeader, ElementName=myControl}

Но на самом деле я не совсем уверен, что вы все равно сможете связать его так, как вы это делаете, так как заголовки столбцов имеют некоторые странные правила, когда дело доходит до связывания. Проверь это:

stackru.com

stackru.com

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

<WPFCtrlDg:ExtDataGridComboBoxColumn Header="{Binding Path=LeftColumnHeader, 
    RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type 
    UserRowView}}, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Width="*"/>
Другие вопросы по тегам