使用 MVVM 绑定 ComboBox SelectedItem

2024-02-26

我有一个问题选定的项目 in my ComboBox.

<ComboBox Name="cbxSalesPeriods"
        ItemsSource="{Binding SalesPeriods}"
        DisplayMemberPath="displayPeriod"
        SelectedItem="{Binding SelectedSalesPeriod}"
        SelectedValuePath="displayPeriod"
        IsSynchronizedWithCurrentItem="True"/>

Here is anything ok If I open the ComboBox, I see the values.

enter image description here If I select an item, the selected Item won't be shown.

有人有想法吗?

在我的 ViewModel 中,我有这两个属性:

public ObservableCollection<SalesPeriodVM> SalesPeriods { get; private set; }

private SalesPeriodVM selectedSalesPeriod;
public SalesPeriodVM SelectedSalesPeriod
{
    get { return selectedSalesPeriod; }

    set 
    {
        if (selectedSalesPeriod != value)
        {
            selectedSalesPeriod = value;
            RaisePropertyChanged("SelectedSalesPeriod");
        }
    }
}

这些是该类的一些属性:

public SalesPeriodVO Vo
{
    get { return period; }
}

public int Year
{
    get { return period.Year; }
    set
    {
        if (period.Year != value)
        {
            period.Year = value;
            RaisePropertyChanged("Year");
        }
    }
}

public int Month
{
    get { return period.Month; }
    set
    {
        if (period.Month != value)
        {
            period.Month = value;
            RaisePropertyChanged("Month");
        }
    }
}

public string displayPeriod { 
    get
    {
        return this.ToString();
    }
}

public override string ToString()
{
    return String.Format("{0:D2}.{1}", Month, Year);
}

EDIT: The Following happens If I remove the Property DisplayMemberPath: enter image description here


您似乎不必要地设置了您的属性ComboBox。您可以删除DisplayMemberPath and SelectedValuePath具有不同用途的属性。您可以看看SelectedItem、SelectedValue 和 SelectedValuePath 之间的区别 https://stackoverflow.com/questions/4902039/difference-between-selecteditem-selectedvalue-and-selectedvaluepath在此发布以获取这些属性的解释。尝试这个:

<ComboBox Name="cbxSalesPeriods"
    ItemsSource="{Binding SalesPeriods}"
    SelectedItem="{Binding SelectedSalesPeriod}"
    IsSynchronizedWithCurrentItem="True"/>

此外,使用您的displayPeriod属性,WPF 框架将其称为ToString方法自动用于需要显示但没有DataTemplate明确地为他们设置。


更新>>>

由于我看不到你的所有代码,我无法告诉你你做错了什么。相反,我所能做的就是为您提供一个完整的工作示例,说明如何实现您想要的目标。我已经删除了无意义的displayPeriod财产以及您的SalesPeriodVO来自您班级的财产,因为我对此一无所知...也许这就是您问题的原因??尝试这个:

public class SalesPeriodV
{
    private int month, year;

    public int Year
    {
        get { return year; }
        set
        {
            if (year != value)
            {
                year = value;
                NotifyPropertyChanged("Year");
            }
        }
    }

    public int Month
    {
        get { return month; }
        set
        {
            if (month != value)
            {
                month = value;
                NotifyPropertyChanged("Month");
            }
        }
    }

    public override string ToString()
    {
        return String.Format("{0:D2}.{1}", Month, Year);
    }

    public virtual event PropertyChangedEventHandler PropertyChanged;
    protected virtual void NotifyPropertyChanged(params string[] propertyNames)
    {
        if (PropertyChanged != null)
        {
            foreach (string propertyName in propertyNames) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            PropertyChanged(this, new PropertyChangedEventArgs("HasError"));
        }
    }
}

然后我在视图模型中添加了两个属性:

private ObservableCollection<SalesPeriodV> salesPeriods = new ObservableCollection<SalesPeriodV>();
public ObservableCollection<SalesPeriodV> SalesPeriods
{
    get { return salesPeriods; }
    set { salesPeriods = value; NotifyPropertyChanged("SalesPeriods"); }
}
private SalesPeriodV selectedItem = new SalesPeriodV();
public SalesPeriodV SelectedItem
{
    get { return selectedItem; }
    set { selectedItem = value; NotifyPropertyChanged("SelectedItem"); }
}

然后初始化集合your values:

SalesPeriods.Add(new SalesPeriodV() { Month = 3, Year = 2013 } );
SalesPeriods.Add(new SalesPeriodV() { Month = 4, Year = 2013 } );

然后进行数据绑定only这两个属性为ComboBox:

<ComboBox ItemsSource="{Binding SalesPeriods}" SelectedItem="{Binding SelectedItem}" />

就是这样......这就是一个完美工作示例所需要的一切。您应该看到项目的显示来自ToString method without your displayPeriod财产。希望您能从这个代码示例中找出错误。

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

使用 MVVM 绑定 ComboBox SelectedItem 的相关文章

  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 如何在 Silverlight 3 中将 .NET RIA 服务与 MVVM 结合起来?

    NET RIA 服务被描述为 Silverlight 的 n 层框架 我一直想知道这个框架和模型 视图 视图模型模式之间有什么关系 它们是否存在冲突 或者您能看到协同组合的潜力吗 NET RIA 服务和 MVVM 是协同作用的 并不冲突 例
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 从固定文档中删除页面?

    如何从固定文档中删除页面 我添加这样的页面 Add page to pageContent PageContent pageContent new PageContent IAddChild pageContent AddChild fix
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a

随机推荐

  • 字符串中的动态 t-sql 引号

    我在存储过程中有以下内容 DECLARE new column name varchar 9 DECLARE table name varchar 16 DECLARE SQLString nvarchar 2000 SET new col
  • 如何使用 Play 2.0 定义标签?

    关于 Play 2 0 模板引擎的文档并不多 如何使用 Scala 模板创建标签 play 2 0 中的模板引擎直接来自 play 1 0 scala 模块 如果您仍然想知道像 Scala 这样的函数式语言能带来什么好处 那么这肯定是它的亮
  • Ruby 正则表达式:即使没有 m 修饰符,^ 也匹配行首?

    红宝石 1 8 7 我使用带有 的正则表达式来匹配字符串开头的模式 问题是 如果在开始处找到该模式any line在字符串中它仍然匹配 如果我使用 m 修饰符 这是我期望的行为 但我没有 irb irb main 001 0 gt str
  • 多个按顺序的 HTTP POST

    我有一个正在开发的应用程序 我需要按顺序执行 3 个 HTTP POST 实现这一点的最佳方法是什么 我是不是该 使每个 HTTP Post 都有自己的异步类 并以菊花链方式连接异步类 即从第一个异步的 onPostExecute 调用第二
  • 空指针测试性能

    C 中测试引用类型变量是否为空指针的性能如何 like if x null 与测试小于零的整数甚至布尔值是否为假相比 是否还有其他关于此类的问题空指针测试 例如是产生的垃圾 我对游戏的每一帧进行了数百次这样的测试 我想知道这些测试是否会导致
  • 如何在没有 $this 的情况下处理类变量?

    我正在制作一个带有 OOP 概念的 WordPress 插件 但我面临一些有线问题 首先我有一个main plugin php文件 我有这样的课程 include once plugin dir path FILE something ph
  • 如何无异常地检查文件是否存在?

    如何在不使用try https docs python org 3 6 reference compound stmts html try陈述 如果您检查的原因是这样您可以执行类似的操作if file exists open it 使用更安
  • pandas 按大写字母排序

    运行这段代码 df pd DataFrame ADc Abc AEc columns Test index 0 1 2 df sort columns Test axis 0 ascending False inplace True 返回排
  • C++开源项目推荐[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ActionBar 中操作/菜单项的动态控制

    有没有办法动态禁用 隐藏 添加 删除 ActionBar 中的菜单项 例如 在用户在活动中填写有效的电话号码之前 操作将被禁用 我在 ActionBar API 中没有找到任何有用的方法 唯一的方法似乎是在 ActionBar 中使用自定义
  • 如何使用imagick的writeImage()函数?

    如果我将脚本保存在与正在操作的图像相同的目录中 则此方法有效 并且结果图像 foo jpg 也在同一位置生成 但是 如果脚本位于一个位置 而我希望使用的图像位于另一个位置 而我希望保存缩略图的位置位于其他位置 那么如何指定这些路径呢 做这样
  • 使用 Jekyll 插件在 _site 内生成文件

    我编写了一个 Jekyll 插件 Tags 它生成一个文件并返回该文件的链接字符串 一切都很好 但如果我将该文件直接写入 site 文件夹 它就会被删除 如果我将该文件放在 site 文件夹之外 则它不会在 site 内生成 我应该在哪里以
  • 为什么 KineticJS 文档中没有draw()方法?

    我花了几个小时在谷歌上搜索 Kinetic Layer draw 方法 我发现的只是用例 没有关于如何 何时以及为何使用它的文档 也许它已经被弃用了 这些是我在学习和使用这个精彩框架时使用的主要链接 http kineticjs com d
  • 无法使 Laravel 4 的 Validator 类在框架外工作

    我正在尝试在框架之外使用 Laravel 4 Eloquent 因为 Illuminate Database 包已通过 Composer 独立可用 Eloquent 本身运行良好 但我在尝试实现验证规则时遇到了阻碍 我首先尝试使用一些预构建
  • 如何处理 Cordova 或 Phonegap 上 android 4.0-4.3 和 4.4 之间的宽度不一致?

    我正在 Cordova 3 4 上做一个应用程序 并在使用 Android 4 4 2 的 Moto X 使用 Android 2 3 的 Samsung Galaxy Ace 和模拟器上进行测试 我保留 cli 创建的原始视口 在CSS上
  • jQuery UI 对话框如何禁用后台输入的焦点?

    当您使用 jQuery UI 打开模式对话框时 您会注意到 如果使用 Tab 键 则可以将焦点放在对话框的按钮上 但对话框外部的任何输入都会被忽略 我正在尝试实现同样的行为jQuery UI 工具叠加 http jquerytools or
  • 具有绝对位置的嵌套 Touchable

    我需要实现一个界面 其中一个对象是可单击的 但该对象的一个 区域执行另一个操作 如下所示 gt clicking on this small area does an action gt clicking on this area does
  • 值循环的最小排序

    给定如下序列 1 2 1 2 1 1 1 2 1 2 1 3 1 2 1 2 1 3 什么是高效的获得最小订购量的方法 1 1 1 2 1 2 1 3 1 2 1 2 1 3 1 2 1 2 暴力方法是显而易见的 所以请不要推荐它 除非提供
  • 如何通过 Facebook 的 Graph API 获取共同好友

    有没有办法使用 Facebook 的 Graph API 获取共同好友列表 我一直在玩这个工具 https www simoncross com fb graph GET https graph facebook com 并且还没有想出办法
  • 使用 MVVM 绑定 ComboBox SelectedItem

    我有一个问题选定的项目 in my ComboBox