WPF-组合框选择已更改=>;更改文本框绑定

本文关键字:gt 文本 绑定 组合 WPF- 选择 | 更新日期: 2023-09-27 18:00:22

我有一个组合框和一个文本框。TextBox绑定到我的ViewModel中的一个"default"属性。

我试图实现的是,当我更改组合框中的值时,TextBox的属性将更改为另一个属性。

<ComboBox SelectedIndex="0" Name="ComboBox1">
    <ComboBoxItem>
        Messages1
    </ComboBoxItem>
    <ComboBoxItem>
        Messages2
    </ComboBoxItem>
</ComboBox>
 <TextBox Text="{Binding Messages1}" IsReadOnly="True" VerticalScrollBarVisibility="Visible" AcceptsReturn="True" Name="LogTextBox" />

我想将TextBox的绑定更改为Messages2。我尝试了很多东西,但似乎都不起作用。

有简单的解决方案吗?

WPF-组合框选择已更改=>;更改文本框绑定

假设您已经实现了INotifyPropertyChanged,您可以这样做:

代码背后:

        public string Message1
        {
            get { return (string)GetValue(Message1Property); }
            set { SetValue(Message1Property, value); }
        }
        // Using a DependencyProperty as the backing store for Message1.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty Message1Property =
            DependencyProperty.Register("Message1", typeof(string), typeof(MainWindow), new PropertyMetadata(string.Empty));
         public string Message2
        {
            get { return (string)GetValue(Message2Property); }
            set { SetValue(Message2Property, value); }
        }
        // Using a DependencyProperty as the backing store for Message2.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty Message2Property =
            DependencyProperty.Register("Message2", typeof(string), typeof(MainWindow), new PropertyMetadata(string.Empty));

        //an array of properties as combobox.Items
        public DependencyProperty[] AllowedProperties 
        { 
            get
            {
                return new DependencyProperty[] { Message1Property, Message2Property };
            }
        }
        //selected property as combobox.selectedItem
        DependencyProperty _chosenProperty;
        public DependencyProperty ChosenProperty
        {
            get
            {
                return _chosenProperty;
            }
            set
            {
                _chosenProperty = value;
                OnPropertyChanged("ChosenValue");
            }
        }
        //value of the selected property as textbox.text.
        public string ChosenValue
        {
            get
            {
                return ChosenProperty == null ? string.Empty : (string)GetValue(ChosenProperty);
            }
        }

XAML:

    <ComboBox ItemsSource="{Binding AllowedProperties}" 
              SelectedItem="{Binding ChosenProperty}"
              >
    </ComboBox>
    <TextBlock Text="{Binding ChosenValue}"/>

之前有人问过——最好、最干净的解决方案,但不是那么通用——是创建几个文本框,除了相关的文本框之外,这些文本框将被折叠可见。更新所选项目的组合框时,请更新文本框的可见性绑定。