2012-03-01 4 views
3

У меня есть шаблоны данных, выглядит следующим образом:Связывание словаря - с ключом «(»

<DataTemplate> 
<TextBlock DataContext="{Binding Fields[ABC]}" Text="{Binding}"/> 
</DataTemplate> 

<DataTemplate> 
<TextBlock DataContext="{Binding Fields[)]}" Text="{Binding}"/> 
</DataTemplate> 

Для класса, который выглядит как

class Source { 
    public Dictionary<string, string> Fields { get; private set; } 
} 

При нанесении второго шаблона, с ключ ') в привязке DataContext, я получаю исключение XamlParseException. Есть ли способ разрешить привязку словаря к работе с другими строками, такими как «)»? Какая-то последовательность escape-символов?

+0

Вы пытались бежать с \ – BlueM

+0

Я бы попробовать прямой проход через конвертер и посмотреть, не то ли это как-то обойти это исключение синтаксического анализа. Или конвертируйте с Linq strOut = dl.FirstOrDefault (kvp => kvp.Key == "(") .Value; In знаете уродливые, но если он работает лучше, чем ничего. – Paparazzi

+0

@BlueM: Это не помогает. –

ответ

2

Вы можете построить допустимый путь с помощью path parameters, это гарантирует, что скобка передается как строка, а не часть описания пути. Самый простой способ сделать это, вероятно, будет через расширение пользовательской разметки, как показано на моем this answer.

Связывание затем можно записать в виде:

{Binding Path={me:PathConstructor Fields[(0)],')'}} 

(Кавычки вокруг круглых скобках не являются обязательными, но делают его более удобным для чтения я думаю)

+0

Спасибо, это помогло мне указать в правильном направлении. Я предполагаю, что в конечном итоге реальная проблема заключалась в том, что некоторые из элементов словаря имели в себе ведущие/конечные пробелы. Этот формат PathConstructor помогает решить эту проблему. –

Смежные вопросы