WPF - MVVM - 组合框选定项

2024-04-17

I have ViewModel(实施的INotifyPropertyChanged)在后台和类中Category它只有一个 type 属性string。我的 ComboBox SelectedItem 绑定到类别的实例。当我更改实例的值时,SelectedItem 不会更新,并且 Combobox 也不会更改。

编辑:代码

组合框:

<ComboBox x:Name="categoryComboBox" Grid.Column="1"  Grid.Row="3" Grid.ColumnSpan="2" 
          Margin="10" ItemsSource="{Binding Categories}"
          DisplayMemberPath="Name" SelectedValue="{Binding NodeCategory, Mode=TwoWay}"/>

财产:

private Category _NodeCategory;
public Category NodeCategory
{
    get
    {
        return _NodeCategory;
    }
    set
    {
        _NodeCategory = value;
        OnPropertyChanged("NodeCategory");
    }
}

[Serializable]
public class Category : INotifyPropertyChanged
{
    private string _Name;
    [XmlAttribute("Name")]
    public string Name
    {
        get
        {
            return _Name;
        }
        set
        {
            _Name = value;
            OnPropertyChanged("Name");
        }
    }

    public void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    [field:NonSerialized]
    public event PropertyChangedEventHandler PropertyChanged;
}

我正在尝试的是:当我设置时

NodeCategory = some_list_of_other_objects.Category;

将该项目选择为Combobox与适当的DisplayMemberPath


您在此行中设置的类别 -

NodeCategory = some_list_of_other_objects.Category;

以及您的类别收藏中的一份(ItemsSource="{Binding Categories}") 应该指的是同一个对象。如果他们不是那么SelectedItem行不通的。

解决方案1 ​​-

您也可以尝试使用SelectedValuePath像这样 -

<ComboBox x:Name="categoryComboBox" 
          ItemsSource="{Binding Categories}"
          DisplayMemberPath="Name" 
          SelectedValuePath="Name" 
          SelectedValue="{Binding NodeCategory, Mode=TwoWay}" />

在代码中你可以做这样的事情 -

private string _NodeCategory;
public string NodeCategory
{
    get
    {
        return _NodeCategory;
    }
    set
    {
        _NodeCategory = value;
        OnPropertyChanged("NodeCategory");
    }
}

并像这样设置所选项目 -

NodeCategory = some_list_of_other_objects.Category.Name;

并使用这样选择的值 -

Category selectedCategory = 
   some_list_of_other_objects.FirstOrDefault(cat=> cat.Name == NodeCategory);

or

Category selectedCategory = 
   Categories.FirstOrDefault(cat=> cat.Name == NodeCategory);

解决方案2-

另一种可能的解决方案是 -

NodeCategory = 
  Categories.FirstOrDefault(cat=> cat.Name == some_list_of_other_objects.Category.Name);

这样你的NodeCategory属性将具有对象的引用Categories收集和SelectedItem将工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF - MVVM - 组合框选定项 的相关文章

随机推荐

  • 使用逻辑回归时sklearn重要特征错误

    以下代码使用随机森林模型为我提供一个显示特征重要性的图表 from sklearn feature selection import SelectFromModel import matplotlib clf RandomForestCla
  • Gradle-与外部项目的多项目?

    在 Gradle 多项目设置中是否无法使用主项目文件夹之外的外部依赖项 就像在settings gradle文件 我可以没有类似的东西吗 include C some path to dependent project ChildA Chi
  • 检查 python 调试器中的复杂变量,例如 pudb

    如何使用 python 调试器检查复杂变量 列表 字典 对象 值 我是 python 新手 我尝试了 pudb 看起来当变量类型为复杂类型时 调试器仅显示变量的类型 而不显示变量的类型价值 是否可以使用 pudb 检查值 或者有其他 pyt
  • 二叉树类型实例化的高度过高

    我正在尝试类型系统 目前正在尝试在类型级别进行反向级别顺序遍历 这些是我正在使用的类型 type LEFT 0 type VALUE 1 type RIGHT 2 type List ReadonlyArray
  • django.core 序列化器和 Django Rest Framework 序列化器之间的区别

    我现在正在学习 Django 刚刚听说 Django Rest Framework DRF 我想知道 django core 序列化器和 rest framework 序列化器之间有什么区别 是的 我知道 DRF 用于 API django
  • ContentCachingResponseWrapper 生成空响应

    我正在尝试实现过滤器来记录请求和响应Spring MVC应用 我使用以下代码 Component public class LoggingFilter extends OncePerRequestFilter private static
  • 如何在 Three.js 中从三角面获取多边形?

    我在网上查了一下是否有人遇到同样的问题 我正在使用 Three js 我有一个 3DObject 其中可能包含孔 面是三角形的 假设我想从上面看到它 我的目标是获得一个代表顶面周长的多边形 这对我来说意味着不再有三角面 而只有 1 个多边形
  • 在 PHP 中,如何判断 pg_query() 是否是返回数据的查询?

    那么一次成功的mysqli query 如果没有数据则返回 true 并且返回一个mysqli result对象如果有数据 即查询是SELECT SHOW DESCRIBE or EXPLAIN 但随着成功的pg query 无论是否有任何
  • 如何将样式应用于列表中的相邻元素

    我可以只使用 CSS 来完成这个场景吗 我有一个任意长度的元素的无序列表 这些元素排列成一个由四个元素组成的网格 当用户将鼠标悬停在某个元素上时 一些附加内容将在该元素下方下拉 并将其下方的行向下推 Content is here
  • 如何将 CSS 翻译添加到现有翻译中?

    我使用 CSS 翻译将 DIV 元素放置在屏幕上 这工作得很好 除了当稍后位移相同的元素时 原始位移被丢弃 使用 javascript 设置 CSS 起始位置 div style transform translate 800px 400p
  • 监控我的应用程序在 Android 中占用的内存

    我正在尝试优化我的应用程序消耗的内存量 当我的应用程序加载时 按住 home 键 然后选择任务管理器 我可以看到该应用程序占用了 17MB 但该值不会刷新 我如何实时跟踪该值 DDMS 有这个选项吗 请具体说明我已经搜索了很多但没有找到 提
  • 如何使用 start 和 endAngle 渲染 svg 圆

    我使用 start 和 endAngle 渲染了 svg 圆 效果很好 但是当我渲染完整的圆 startAngle为70 endAngle为70 时 输出有很大的不同 0 90 180 270除外 我为这段代码做错了什么 function
  • 如何从 Kubernetes Pod 连接到私有 IP

    我正在尝试从 Pod 内连接到私有 IP 从 Pod 对该 IP 执行 Ping 操作返回无法访问 但是 我可以从主机系统 ping 该 IP 将流量从 pod 路由到目标私有 IP 的最佳方式是什么 Pod 不允许直接连接到 kubern
  • AVAudioPlayer 在调试模式下抛出断点

    每次我加载应用程序时 它都会停止 就像我在此行设置了断点一样 self audioPlayer AVAudioPlayer alloc initWithData dataPersister loadData self fileName er
  • 如何从 Java 系统设置中获取代理设置

    我正在寻找如何在 Windows 下使用 Java 获取系统代理信息的方法 但我只找到了一种方法 但这对我不起作用 public static void main String args throws Throwable System se
  • 红宝石数组内部结构

    ruby 数组内部是如何实现的 主要是在 CRuby 中 但欢迎任何其他信息 它们是像 C 向量一样可增长的数组还是基于列表的 移位 取消移位以及通过索引访问元素的复杂性是多少 它们是可增长的数组 在最后增长 shift is O 1 un
  • hive中每行的百分比计算

    我在配置单元中有一个具有以下架构的表 差值 int 计数值 int 值为 5 2 30 1 90 1 100 1 现在我想找到每个 count value 与 count value 总和的百分比 每行的值类似于 count value s
  • 终止设备上的调试

    我对设备上的调试有点困惑 当我使用模拟器时 在调试会话之后 我只需关闭模拟器窗口 但是在我的设备上调试时 如何关闭会话 只需断开 USB 电缆即可 并且安装的 apk 由Eclipse安装 应该手动删除 您可以通过转到 调试 视角 右键单击
  • 当 readdir() 返回文件名时,stat() 错误“没有这样的文件或目录”

    我无法识别 stat 引发的错误 下面的程序读取目录中的所有文件并打印文件名 DIR dp struct dirent dirp struct stat sb if dp opendir argv 1 NULL perror can t o
  • WPF - MVVM - 组合框选定项

    I have ViewModel 实施的INotifyPropertyChanged 在后台和类中Category它只有一个 type 属性string 我的 ComboBox SelectedItem 绑定到类别的实例 当我更改实例的值时