Привязка 2 ComboBox к словарю, затем привязка ComboBox друг к другу - PullRequest
0 голосов
/ 25 июня 2010

У меня есть словарь от int до char (десятичный и ASCII-символ, связанный с этим int). Я хочу иметь два редактируемых поля со списком, которые предварительно заполнены начальными значениями. Если пользователь выбрал значение из ComboBox «A» (ключ dict), я хочу, чтобы значение dict заполнялось в ComboBox «B» - и наоборот.

Предварительно заполнить начальные значения в комбинированные списки «A» и «B» относительно просто. Меня сбило с толку двустороннее связывание.

Вот виртуальная машина, где я заполняю словарь:

    private void InitializeSpearatorsDictionaries()
    {
        // comma, semicolon, vertical pipe, tilda
        int[] fields = { 44, 59, 124, 126 };
        foreach (int f in fields)
        {
            FieldDict.Add(f, Convert.ToChar(f));
        }
    }
    public IDictionary<int, char> FieldDict
    {
        get
        {
            if (_fieldDict == null)
            {
                _fieldDict = new Dictionary<int, char>();
            }
            return _fieldDict;
        }
    }

Вот исходный XAML, с которым я связываюсь со Словарём (всё ещё без проблем)

<StackPanel>
<ComboBox x:Name="cbFieldChar" ItemsSource="{Binding Path=FieldDict}" SelectedIndex="0" DisplayMemberPath="Key" SelectedValuePath="Value" IsEditable="True" />
<ComboBox x:Name="cbFieldDecimal" ItemsSource="{Binding Path=FieldDict}" SelectedIndex="0" DisplayMemberPath="Value" SelectedValuePath="Key" IsEditable="True" />
</StackPanel>

Изначально у меня были ItemsSource = {Binding Path = FIeldDict.Keys} и {Binding Path = FieldDict.Values}, в этом случае мне не нужны атрибуты DisplayMemberPath и SelectedValuePath, но при попытке получить двусторонний работая, я переработал его (оба подхода работают с начальной загрузкой словаря).

Вот последняя попытка получить двустороннюю связь между двумя работающими ComboBox

<StackPanel>
<ComboBox x:Name="cbFieldChar" ItemsSource="{Binding Path=FieldDict}" SelectedIndex="0" DisplayMemberPath="Key" SelectedValuePath="Value" IsEditable="True" />
<ComboBox x:Name="cbFieldDecimal" ItemsSource="{Binding Path=FieldDict}" SelectedIndex="0" DisplayMemberPath="Value" SelectedValuePath="Key" IsEditable="True" SelectedValue="{Binding ElementName=cbFieldChar, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Path=ItemsSource.Value}" />
</StackPanel>

Есть идеи?
Заранее спасибо,
* 1018 Ред *

1 Ответ

0 голосов
/ 26 июня 2010

Я понял часть этого. Следующее будет работать для синхронизации двух ComboBox со значениями, которые уже существуют в них.

<ComboBox x:Name="cbFieldChar" ItemsSource="{Binding Path=FieldDict}" SelectedIndex="0" DisplayMemberPath="Value" SelectedValuePath="Key" IsEditable="True" />
<ComboBox x:Name="cbFieldDecimal" ItemsSource="{Binding Path=FieldDict}" SelectedIndex="0" DisplayMemberPath="Key" SelectedValuePath="Value" IsEditable="True" SelectedValue="{Binding ElementName=cbFieldChar, Path=SelectedValue}" />

Я попытаюсь поработать над ValueConverter, чтобы улучшить редактируемый аспект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...