如何将TextBlock绑定到通过绑定给出键的字典条目?

时间:2016-07-25 13:18:44

标签: wpf dictionary binding

假设我有一个Dictionary<string, string>和一个ComboBox,其中的项目是从包含该词典键的集合中填充的。 如何将TextBlock绑定到所选键的值?

<ComboBox ItemsSource="{Binding MyKeyCollection}"/>

<TextBox Text={Binding //What do I put here? }/>

2 个答案:

答案 0 :(得分:0)

以下是如何绑定组合框中的数据 -

<ComboBox ItemsSource="{Binding SomeCollection}">

        <ComboBox.ItemTemplate>

            <DataTemplate>

                <StackPanel Orientation="Horizontal">

                    <TextBlock Text="{Binding Key}"
                               Margin="5"/>
                    <TextBlock Text="{Binding Value}"
                               Margin="5"/>

                </StackPanel>                                

            </DataTemplate>

        </ComboBox.ItemTemplate>

    </ComboBox>

在DataTemplate中按照您的意愿设置样式

答案 1 :(得分:0)

要实现您的目标,您必须确保ViewModel同时包含KeyCollection和字典。在这里我的解释:

假设您有此ViewModel:

public class DictVm
    {
        public Dictionary<string, string> MainDictionary { get; set; }
        public ObservableCollection<string> MyKeyCollection{ get; set; }
        public string SelectedKey{ get; set; }

        private string _selectedDictValue;
        public string SelectedDictValue {
        get {

            if (MainDictionary.TryGetValue(SelectedKey, _selectedDictValue))
                return _selectedDictValue;
            return string.Empty;
        }
        set { _selectedDictValue = value; } }
    }

这是您的MainWindow构造函数:

   private DictVm vm;
   public MainWindow()
    {
        InitializeComponent();

        vm = new DictVm();
        DataContext = vm;
    }

这里我将如何修改xaml:

<ComboBox x:Name="MyCombo" ItemsSource="{Binding MyKeyCollection}" SelectedValue="{Binding SelectedKey}"/>

<TextBox Text="{Binding SelectedDictValue}"/>