Как сделать простое связывание в Silverlight? - PullRequest
1 голос
/ 01 сентября 2009

Я понимаю, что Silverlight 3.0 имеет привязку, но просто хочу простой пример того, как использовать это для чтения свойства из класса.
У меня есть класс с именем Appointment, который в качестве свойства String называется Location:

    Public Property Location() As String
        Get
            Return _Location
        End Get
        Set(ByVal Value As String)
            _Location = Value
        End Set
    End Property

С частной декларацией для _Location as String, конечно.
Я хочу, чтобы элемент XAML связывался с этим свойством, чтобы отобразить его в TextElement, но он должен быть в XAML, а не в коде, например, я хочу что-то вроде этого:

<TextBlock Text="{Binding Appointment.Location}"/> 

Что мне нужно сделать, чтобы это заработало?
Это должно быть решение Silverlight 3.0, так как некоторые функции WPF отсутствуют, например DynamicResource, к которому я привык.


Просто добавьте, что мой XAML загружается из отдельного XAML-файла, это может быть причиной того, что примеры привязки не работают, поскольку существуют разные XAML-файлы одного и того же Appointment. быть применены.

Ответы [ 3 ]

3 голосов
/ 01 сентября 2009

У вас есть два варианта.

Если класс «Назначение» может использоваться как DataContext для элемента управления или окна, вы можете сделать:

<TextBlock Text="{Binding Location}" />

Если, однако, «Назначение» является свойством текущего DataContext, вам необходим более сложный путь для привязки:

<TextBlock Text="{Binding Path=Appointment.Location}" />

Полная информация документирована в MSDN на странице Обязательные декларации . Если ни один из них не работает, убедитесь, что DataContext установлен правильно.

1 голос
/ 01 сентября 2009

Вам нужно что-то в коде, если только вы не хотите объявить экземпляр Appointment в ресурсе и привязаться к нему, но я сомневаюсь, что это то, что вы хотите.

Необходимо связать свойство Text с путем свойства «Location», а затем назначить DataContext содержащего XAML экземпляру Назначения: -

<Grid x:Name="LayoutRoot" Background="White">
   <TextBlock Text="{Binding Location}" />
</Grid>

Затем в событии загрузки элемента управления: -

 void Page_Loaded(object sender, RoutedEventArgs e)
 {
    this.DataContext = new Appointment() { Location = "SomePlace" };
 }

Обратите внимание, в этом случае я использую элемент управления Page по умолчанию.

0 голосов
/ 01 сентября 2009

Если я правильно читаю, вам нужно создать экземпляр Appointment, установить для этого экземпляра DataContext элемента управления и изменить привязку, просто сказав: Text = "{Binding Location}"

Также рассмотрите возможность реализации INotifyPropertyChanged в своем классе Appointment, чтобы классы данных могли уведомлять пользовательский интерфейс об изменениях значений свойств.

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