XAML DataContext - PullRequest
       4

XAML DataContext

0 голосов
/ 21 декабря 2011

Это работает

<Border>
    <StackPanel>
        <TextBlock Text="{Binding Foo.Info1}" />
        <TextBlock Text="{Binding Foo.Info2}" />
    </StackPanel>
</Border>

, но это не

<Border DataContext="Foo">
    <StackPanel>
        <TextBlock Text="{Binding Info1}" />
        <TextBlock Text="{Binding Info2}" />
    </StackPanel>
</Border>

Насколько я понимаю, если вы установите datacontext для родителя, дети смогут связываться со свойствами,Разве Border не является хорошим элементом, чтобы быть родителем?Я очень плохо знаком с привязкой данных в XAML.Может кто-нибудь сказать мне, почему второй порез не работает, и направить меня в правильном направлении?

Ответы [ 4 ]

1 голос
/ 21 декабря 2011

Позвольте мне рискнуть предположить, что вам все еще нужно связать с DataContext, а не просто применять то, что выглядит в XAML как буквальную строку "Foo":

<Border DataContext="{Binding Foo}">
  <StackPanel>
    <TextBlock Text="{Binding Info1}" />
    <TextBlock Text="{Binding Info2}" />
  </StackPanel>
</Border>
1 голос
/ 21 декабря 2011

Ваш синтаксис неправильный, вы должны написать:

<Border DataContext="{Binding Foo}">
    <StackPanel>
        <TextBlock Text="{Binding Info1}" />
        <TextBlock Text="{Binding Info2}" />
    </StackPanel>
</Border>
1 голос
/ 21 декабря 2011

Использование

<Border DataContext="{Binding Foo}"> 

Без привязки текст данных вашей границы представляет собой просто строку "Foo", которая не имеет никаких свойств Info1, Info2

Надеюсь, это поможет

0 голосов
/ 21 декабря 2011
<Border DataContext="{Binding Foo}">
    <StackPanel>
        <TextBlock Text="{Binding Info1}" />
        <TextBlock Text="{Binding Info2}" />
    </StackPanel>
</Border>

Вышеизложенное теперь будет означать, что Info1 и Info2 будут существовать на DataContext, который в этом случае теперь связан с Foo.

Установка DataContext, как вы сделали; <Border DataContext="Foo"> приведет к тому, что свойство DataContext вернет Foo .

<Border DataContext="Foo">
    <StackPanel>
        <TextBlock Text="{Binding}" />
        <TextBlock Text="{Binding}" />
    </StackPanel>
</Border>

Если вы попробуете вышеуказанный код, оба TextBlock вернутся Foo .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...