XAML связать словарь с переменным ключом

1

Я хотел бы привязать элемент словаря, используя переменную в качестве ключа, например:

PanelNames.cs

public static class PanelNames
{
    public static string Panel1 = "Panel1";

    public static string Panel2 = "Panel2";
}

MainWindowVM.cs

IDictionary<string, object> Panels { get; }

MainWindow.xaml

<TextBlock Content="{Binding Panels[Panel1]}" /> <-- this works fine, because Panel1 is simply string

<TextBlock Content="{Binding Panels[PanelNames.Panel1]}" /> <-- this doesn't work, because there is no key with such name, but I want to keep names outside XAML file and use PanelNames static class.

Возможно ли получить доступ к элементу словаря, используя переменную в качестве ключа в XAML? Я видел этот пост, но он не соответствует моим требованиям.

  • 0
    Вы хотите показать только один элемент или несколько элементов ?,
  • 0
    Просто я хочу избежать использования жестко закодированных строк. Вместо того, чтобы вводить жестко закодированный ключ, я бы хотел использовать значение constat. Оба подхода извлекают одно значение из словаря.
Теги:
xaml
wpf

1 ответ

1

Вместо hardcoding строки в XAML вы должны привязать это к другому свойству.

Посмотреть,

<TextBlock Content="{Binding PanelValue}" />

ViewModel,

IDictionary<string, object> Panels { get; }

private string _panelValue;
public string PanelValue
{
    get { return Panels[panelValue]; }
    set
    {
        // Make sure Panels has this key,
        _panelValue = value;
        OnPropertyChanged("PanelValue");
    }
}

Таким образом, в вашем коде вы можете установить PanelValue на ключ, значение которого вы хотите отобразить в TextBlock,

  • 0
    Я хотел бы избежать использования логики во ViewModel для получения значения из словаря. Сначала я думал об использовании какого-либо конвертера, но раньше я хотел бы исследовать, возможна ли моя идея.
  • 1
    Этот гибкий. Если вы не хотите, то я думаю, что конвертер является решением,
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню