Можно ли привязать элементы управления silverlight к DynamicObject.Properties? - PullRequest
3 голосов
/ 14 сентября 2011

У меня есть класс DynamicObject, который связан с некоторыми элементами управления в Silverlight XAML.

class Localizer
{
    public Strings Strings { get; set; }
}

public class Strings : DynamicObject
{
    Dictionary<string, string> values;

    public Strings(Dictionary<string, string> values)
    {
        this.values = values;
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        string value;
        bool success = values.TryGetValue(binder.Name, out value);
        result = value;
        return success;
    }
}

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

<TextBlock Text="{Binding Strings.User, Source={StaticResource Localizer}}"/>

При запуске приложения я получаю эту ошибку в выводе VS:

System.Windows.Ошибка данных: ошибка пути BindingExpression: свойство 'Login' не найдено в '.... Localization.StringsResource' '.... Localization.StringsResource' (HashCode = 10857028).BindingExpression: Path = 'Strings.Login' DataItem = '.... Localization.Localizer' (HashCode = 30604389);Целевым элементом является 'System.Windows.Controls.Button' (Name = 'btnLogin');Свойство target - «Content» (тип «System.Object»).

, но когда свойство чтения в коде выглядит так:

string UserName = localizer.Strings.Login;

Это работает правильно, возможно ли привязать элементы управления кDynamicObject в xaml?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2011

В Silverlight 4 нельзя связывать свойства привязки данных, но можно индексировать привязки данных. Поскольку я предполагаю, что вы не поддерживаете изменения данных в этом объекте Strings, поскольку он не поддерживает INotifiyPropertyChanged, вы можете просто вернуть словарь и использовать синтаксис привязки индексатора.

Но если вам нужно было поддерживать INotifiyPropertyChanged, silverlight имеет синтаксис для уведомления об изменениях определенных значений индексатора new PropertyChangedEventArgs("Item["+key+"]"), которые вы можете использовать в объекте Strings.

Silverlight 5 может иметь простой обходной путь или сложный, на данный момент трудно сказать.

0 голосов
/ 14 сентября 2011

К сожалению, это ошибка в Silverlight,: (
Ошибка привязки данных к динамическим объектам

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