2009-06-16 1 views
1

У меня есть объект Dictionary в моей модели ViewModel с ключом/значениями, которые переводят слова в представлении.Есть ли в XAML синтаксис типа XPath, который может получать элементы из коллекции?

можно получить информацию о языке как объекта XML, а затем выбрать переведенную фразу с помощью XPath-то вроде этого:

<TextBlock DataContext="{TranslatorDictionaryXml}" Text="{Binding XPath=/terms/term[key='edit']/value[@lang='en-US']}"/> 

Но есть подобный способ сделать это с не-XML-объект, который предлагает своего рода синтаксис типа XPath, например

псевдокод:

<TextBlock DataContext="{CurrentLanguageTranslatorDictionary}" Text="{Binding path=Key['edit']}"/> 

Я не хочу, чтобы связать коллекцию в ListView или любой другой элемент коллекции, но хочу, чтобы связать объект один переводчика для отдельных TextBlocks и TextBoxes и ToolTips и т. д., а затем использовать какой-то синтаксис пути для получения определенного элемента из связанной коллекции.

Возможно ли это?

ответ

1

Да, вы можете сделать то и другое, есть свойство XPath на Binding. Есть несколько хороших примеров того, как это сделать here, и на всех образцах binding how-to. Вы можете also use a collection's indexer сделать это, но не нужны одинарные кавычки или экранированные кавычки.

<TextBox Text="{Binding Path=Countries[US]}" /> 

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 

     Countries = new Dictionary<string, string>(); 
     Countries.Add("US", "United States"); 
     Countries.Add("CA", "Canada"); 

     this.DataContext = this; 
    } 

    public Dictionary<string, string> Countries { get; set; } 
} 
+0

безупречный, спасибо! –