wpf - WPF ListBox SelectedItem问题

标签 wpf mvvm listbox

任何人都可以帮忙,浪费了很多时间试图解决这个问题。

我有一个具有以下属性的ViewModel

    public ObservableCollection<ListItem> OpcoList { get; set; }
    public ListItem SelectedOpco {
        get {
            return _selectedOpco;
        }
        set {
            if (_selectedOpco != null && _selectedOpco.Equals(value)) {
                return;
            }
            var oldValue = _selectedOpco;
            _selectedOpco = value;

            RaisePropertyChanged("SelectedOpco");  
    }

在我的XAML中
    <ListBox Name="listOpco" ItemsSource="{Binding OpcoList}" 
   SelectionMode="Single" SelectedItem="{Binding Mode=TwoWay, Path=SelectedOpco}">

但是,每当我在VM中为SelectedOpco设置一些值时,它都不会显示为ListBox中的选定值。

有任何想法吗?提前致谢!

最佳答案

您可以尝试一些操作:

  • 将setter简化为更简单的操作(它应该执行您期望的操作-检查是否选择了列表的其他元素)。
    set {
        if(_selectedOpco != value) {
            _selectedOpco = value;
            RaisePropertyChanged("SelectedOpco");
        }
    }
    
  • RaisePropertyChanged("SelectedOpco");行上放置一个断点,以查看执行是否在那里。如果是,请检查该类是否真的标记为INotifyPropertyChanged
    if(!(this is INotifyPropertyChanged))
         throw new Exception("Not INotifyPropertyChanged");
    
  • 尝试使用以下方法设置值:
    SelectedOpco = OpcoList.FirstOrDefault(); // LastOrDefault
    

  • 祝你好运!

    关于wpf - WPF ListBox SelectedItem问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11775973/

    相关文章:

    c# - Wpf 绑定(bind)列列表

    c# - ObservableCollection未更新

    WPF 列表框项目模板 : How to make contents fill available space?

    c# - WPF Datagrid在添加新项目后进入编辑

    wpf - 在 WPF 中创建页面或窗口

    c# - WPF 应用程序中使用了哪些线程?

    wpf - 相对源绑定(bind)表达式错误

    wpf - 如何从纹理图像 x、y 到 3d 空间进行 "reverse"纹理映射?

    c# - WPF 列表框动态填充 - 如何让它刷新?

    带有只读/禁用项的 WinForms ListBox