Доступ к объекту codebehind в XAML - PullRequest
0 голосов
/ 07 августа 2009

Другой пост описывает, как получить доступ к кодовой области переменная в XAML.

Однако я хотел бы получить доступ к переменной в codebehind object из XAML. Объект codebehind, называемый FeedData , объявлен как свойство зависимости типа FeedEntry . Этот класс является просто контейнерным классом со свойствами string и datetime.

Свойство Codebehind определено так:

public FeedEntry FeedData
        {
            get { return (FeedEntry)GetValue(FeedDataProperty); }
            set { SetValue(FeedDataProperty, value); }
        }
        public static readonly DependencyProperty FeedDataProperty =
            DependencyProperty.Register("FeedData", typeof(FeedReaderDll.FeedEntry), typeof(FeedItemUserControl), 
            new FrameworkPropertyMetadata(new FeedEntry(){ Title="Hi!", Published=DateTime.Now }));

В XAML я делаю это, что не работает:

<UserControl x:Class="FeedPhysics.UserControls.FeedItemUserControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="40" Width="200"
    Background="Blue"
    DataContext="{Binding RelativeSource={RelativeSource Self}}"
    x:Name="xRoot">
    <StackPanel>
        <TextBlock Text="{Binding Title}" Foreground="White"/>
        <TextBlock Text="{Binding Published}" Foreground="White"/>
    </StackPanel>
</UserControl>

Но если я переопределю настройку окна данных datacontext в конструкторе codebehind, это будет работать! Как это:

xRoot.DataContext = FeedData;

Я понимаю, почему это работает, когда в кодебэхтинге установлен текстовый текст. Но я хотел бы найти способ получить переменные внутри объекта, который объявлен в codebehind. Потому что все должно быть выполнимо из XAML, верно?

Спасибо за ответы заранее.

1 Ответ

0 голосов
/ 07 августа 2009

Попробуйте установить DataContext StackPanel для объекта FeedData:

<StackPanel DataContext="{Binding FeedData}">

...

Это заставит StackPanel взглянуть на DependencyProperty, и все элементы в нем будут ссылаться как свойства FeedData.

Пока вы определяете DataContext как "FeedData" где-то в логическом дереве над визуальными элементами, которые вы привязываете к его свойствам, он будет работать.

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