Привязка содержимого метки к полю строки Self, но без результата - PullRequest
0 голосов
/ 02 сентября 2010

Я пытаюсь сделать простую привязку в своем пользовательском элементе управления:

<UserControl x:Class="MyApp.FlowNode" ...>
    <StackPanel>
        <Label Content="{Binding Path=Header, RelativeSource={RelativeSource Self}}" />
    </StackPanel>
</UserControl>

С базовым кодом:

public partial class FlowNode : UserControl
{
    public FlowNode()
    {
        InitializeComponent();
    }

    public string Header { get { return "Testing"; } };
}

Однако метка остается пустой.Что я делаю не так?

Ответы [ 4 ]

2 голосов
/ 02 сентября 2010

{RelativeSource Self} относится к экземпляру Label, а не к вашему пользовательскому элементу управления.

Вместо использования RelativeSource, вы должны установить DataContext UserControl на себя, как предложил karmicpuppet.

0 голосов
/ 17 ноября 2011

Самый удобный способ получить доступ к «Me» / «this» в xaml, на мой взгляд, это поставить имя под свой контроль: И затем, если вы связываетесь со свойством элемента управления или dp, вы используете синтаксис ElementName.

Таким образом, вы не нарушаете DataContext вашего элемента управления.

Возможно, есть способ привязки RelativeSource FindAncestor, но я не вижу преимуществ перед этим.

Но не устанавливает DataContext вашего элемента управления на себя, иначе он потеряет понимание своего DataContext.

0 голосов
/ 02 сентября 2010

Попробуйте использовать

{Binding Path=Header, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type FlowNode}}}.
0 голосов
/ 02 сентября 2010

В вашем конструкторе установите DataContext из UserControl на себя. msgstr "this.DataContext = this". И удалите RelativeSource из вашей привязки.

...