Привязка Silverlight к элементу в словаре - PullRequest
1 голос
/ 10 мая 2011

Если я сделаю определение ViewModel следующим:

public class MainViewModel : DynamicObject
{
    public Dictionary<string, string> Attributes { get; set; }
    public MainViewModel()
    {
        Attributes = new Dictionary<string, string>();
        Attributes["Welcome"] = "Welcome to MVVM Light";
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        if (Attributes.ContainsKey(binder.Name))
        {
            result = Attributes[binder.Name];             
        }
        else
            result = "";
        return true;
    }
}

В Silverlight я получаю следующую ошибку:

System.Windows.Data Error: BindingExpression path error: 'Welcome' property not found on 'DictionaryBasedVM.ViewModel.MainViewModel' 'DictionaryBasedVM.ViewModel.MainViewModel' (HashCode=30542218). BindingExpression: Path='Welcome' DataItem='DictionaryBasedVM.ViewModel.MainViewModel' (HashCode=30542218); target element is 'System.Windows.Controls.TextBlock' (Name=''); target property is 'Text' (type 'System.String')..

То же самое отлично работает в WPF.

Ответы [ 2 ]

1 голос
/ 10 мая 2011

Проблема в том, что DynamicObject вступает в игру только тогда, когда ссылка удерживается идентификатором, напечатанным как dynamic.

Однако обработка Silverlight Xaml работает с object, а не dynamic и использует отражение для определения необходимой информации о свойствах.

Один из вариантов, на которые указывает Оливер, - использовать способность Silverlight работать с индексаторами на основе string.

1 голос
/ 10 мая 2011

Попробуйте это "{Binding Attributes [Welcome]}"

...