Silverlight 4 ComboBox - ошибка при использовании привязки OneWay к SelectedItem - PullRequest
1 голос
/ 27 августа 2011

Это самый чистый пример, который я могу привести.
У меня есть простой ComboBox:

<ComboBox ItemsSource="{Binding ItemsSource}" SelectedItem="{Binding SelectedItem, Mode=OneWay}"/>

Это CodeBehind:

public partial class MainPage : UserControl, INotifyPropertyChanged
    {
        private List<string> m_ItemsSource;
        public List<string> ItemsSource
        {
            get
            {
                return m_ItemsSource;
            }
            set
            {
                m_ItemsSource = value;
                PropertyChanged(this, new PropertyChangedEventArgs("ItemsSource"));
            }
        }

        private string m_SelectedItem;
        public string SelectedItem
        {
            get
            {
                return m_SelectedItem;
            }
            set
            {
                m_SelectedItem = value;
                PropertyChanged(this, new PropertyChangedEventArgs("SelectedItem"));
            }
        }

        public MainPage()
        {
            InitializeComponent();
            DataContext = this;
            ItemsSource = new List<string>()
            {
                "Value A",
                "Value B"         
            };            
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            SelectedItem = "Value A";
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            SelectedItem = "Value B";
        }

        public event PropertyChangedEventHandler PropertyChanged;       
    }

По какой-то причине SelectedItem в ComboBox корректно обновляется при первом нажатии кнопки, но затем перестает отвечать.
Но как ни странно, при переключении на Mode = TwoWay все работает.
Мне особенно нужна привязка OneWay, и я не хочу, чтобы ComboBox изменял это свойство. Это известная ошибка или какое-то странное дизайнерское решение?

1 Ответ

0 голосов
/ 28 августа 2011

Это известная ошибка, и кажется, что она все еще происходит в Silverlight 4. Всегда используйте привязку TwoWay с SelectedItem.

Связывание ComboBox. Выбранный элемент в Silverlight

...