Существует ли в XAML синтаксис, подобный XPath, который может извлекать элементы из коллекции?

StackOverflow https://stackoverflow.com/questions/1002292

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть объект Dictionary в моей ViewModel с ключом / значениями, которые переводят слова в представлении.

Можно получить языковую информацию в виде 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 или любому другому элементу коллекции, но хочу привязать один объект Translator к отдельные текстовые блоки, текстовые поля и всплывающие подсказки, и т.д.а затем используйте какой-то синтаксис path, чтобы получить определенный элемент из связанной коллекции.

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

Это было полезно?

Решение

Да, вы можете сделать и то, и другое, есть свойство XPath на Обязательный также.Есть несколько хороших примеров того, как это сделать здесь, и на протяжении всего инструкции по привязке образцы.Ты можешь также используйте индексатор коллекции чтобы сделать это, но для этого не нужны одинарные кавычки или экранированные кавычки.

<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; }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top