【问题标题】:C# ComboBox SelectedItem not UpdatingC# ComboBox SelectedItem 未更新
【发布时间】:2018-08-30 13:29:17
【问题描述】:

我的问题是,当我在 ComboBox 中选择一个项目后,组合框的第一个项目或“默认”项目保持为空,但如果我单击组合框,则下面显示的值是可选的等等,但我想要点击的那个显示在“默认/第一”位置。

到目前为止我尝试了什么
XAML:

<ComboBox Margin="55,0,0,10" Height="20" Width="145" VerticalAlignment="Center" HorizontalAlignment="Left" 
    ItemsSource="{Binding TabItems, Source={StaticResource MainWindowViewModelRefactored}, Mode=TwoWay}" 
    SelectedItem="{Binding SelectedItem, Source={StaticResource MainWindowViewModelRefactored}, Mode=TwoWay}" 
    DisplayMemberPath="Header">
</ComboBox>

属性:

public TabItem SelectedItem {
    get {
        return _selectedItem;
    }
    set {
        UpdateTCVCollection(value);
        _selectedItem = value;
        NotifyPropertyChanged("SelectedItem");
    }
}

如果我打开组合框,所选项目会突出显示,但我也希望在组合框关闭时将其显示在“第一位”。

【问题讨论】:

  • 您需要在 SelectedItem 处将 UpdateSourceTrigger 设置为 PropertyChanged
  • @horotab 谢谢,试过了还是不行。
  • 这应该默认工作吗?你的 ComboBox 是什么样子的? TabItem 是您的自定义类型吗? TabItems 是什么类型,UpdateTCVCollection 有什么作用?根据您提供的信息,您的问题无法重现。

标签: c# wpf combobox binding


【解决方案1】:

您可以在索引更改时添加一个方法,然后删除用户选择的项目并在开头添加它。

我已将 Sorted 的值设置为 false,因为这样您选择的值将不会在您的 ComboBox 中重新组织。

private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e) {
    RadItem selectedItem = ComboBox1.SelectedItem as RadItem;

    if (selectedItem != null) {
        ComboBox1.Items.Remove(selectedItem);
        ComboBox1.Items.Sorted = true;
        ComboBox1.Items.Sorted = false;
        ComboBox1.Items.Insert(0, selectedItem);
        ComboBox1.Text = selectedItem.Text;
    }
}

【讨论】:

    【解决方案2】:

    将 UpdateSourceTrigger 添加到您的组合框。

    UpdateSourceTrigger=PropertyChanged
    

    例子:

    <ComboBox Margin="55,0,0,10" Height="20" Width="145" VerticalAlignment="Center" HorizontalAlignment="Left" 
        ItemsSource="{Binding TabItems, Source={StaticResource MainWindowViewModelRefactored}, Mode=TwoWay}" 
        SelectedItem="{Binding SelectedItem, Source={StaticResource MainWindowViewModelRefactored}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
        DisplayMemberPath="Header">
    </ComboBox>
    

    看看this MSDN link

    这应该可以帮助您解决问题。

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 2015-06-28
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 2021-09-26
      相关资源
      最近更新 更多