MVVM WPF ComboBox SelectedItem 绑定未在数据网格内激活

2023-11-21

在数据网格内操作时,我一直在努力保存组合框选定的值。当我制作没有数据网格的测试解决方案时,一切正常。上下文是与相关国家的人名。国家/地区存储在 xml 文件中。这是初始视图的快照:

Combobox with country names

您可以在此处看到PersonList.xaml(的重要部分):

<UserControl.Resources>
        <XmlDataProvider x:Key="Dataxml" Source="\Properties\AllCountries.xml" />
        <model:Person x:Key="Person"/>
    </UserControl.Resources>
    <UserControl.DataContext>
        <viewModel:PersonListViewModel />
    </UserControl.DataContext>

<DataGrid ItemsSource="{Binding Persons}" AutoGenerateColumns="False" IsReadOnly="False" CanUserAddRows="False" SelectionUnit="FullRow" SelectedItem="{Binding SelectedPerson}" >
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="Name" Binding="{Binding Name}" CanUserSort="true" ></DataGridTextColumn>
                            <DataGridTemplateColumn Header="Country">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <ComboBox
                                                Width="150"
                                                SelectedValuePath="country"
                                                IsSynchronizedWithCurrentItem="True"
                                                ItemsSource="{Binding Source={StaticResource Dataxml}, XPath=/countries/country}"
                                                SelectedIndex="{Binding CountryIndex}"
                                                SelectedItem="{Binding Path=XmlCountry, Mode=TwoWay}">
                                            <ComboBox.ItemTemplate>
                                                <DataTemplate>
                                                    <TextBlock>
                                                        <TextBlock.Text>
                                                            <MultiBinding StringFormat="{}{0}, {1}">
                                                                <Binding XPath="name" />
                                                                <Binding XPath="iso" />
                                                            </MultiBinding>
                                                        </TextBlock.Text>
                                                    </TextBlock>
                                                </DataTemplate>
                                            </ComboBox.ItemTemplate>
                                        </ComboBox>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>
                        </DataGrid.Columns>
                    </DataGrid>

该网格由 PersonListViewModel 填充,该模型具有私有ObservableCollection<Person> _persons实现 INotifyPropertyChanged 的​​属性,并且是网格的 ItemsSource。您还会看到SelectedItem="{Binding SelectedPerson}"在网格中。那部分工作正常。

Person 模型类具有 CountryIndex(字符串,xml 文件中的索引,计算)、Country(字符串,国家/地区名称),现在我实现了 XmlCountry 属性(XmlElement,xml 文件中的 xmlnode。xml 文件看起来像这:

?xml version="1.0" encoding="utf-8"?>
<countries>
  <country>
    <iso>AF</iso>
    <name>Afghanistan</name>
  </country>
  <country>
    <iso>AL</iso>
    <name>Albania</name>
  </country>
  <country>
    <iso>DZ</iso>
    <name>Algeria</name>
  </country>
  <country>
    <iso>AS</iso>
    <name>American Samoa</name>
  </country>
  <country>
    <iso>AD</iso>
    <name>Andorra</name>
  </country>
etc, etc, ....

当我在 ViewModel 构造函数中加载人员时,人员的国家/地区名称用于计算国家/地区索引,该索引用于设置初始值,如屏幕截图中所示。我通过使用实现了这一点SelectedIndex="{Binding CountryIndex}"在上面的 xaml 中。

然后问题就开始了;我无法在组合框中选择国家/地区来调用任何内容Person模型或PersonListViewModel。我几乎尝试过任何东西......:P

显然,解决方案的关键是组合框中的绑定:

SelectedItem="{Binding Path=XmlCountry, Mode=TwoWay}"

这里的属性“XmlCountry”位于Person模型。我试图把它放在PersonListViewModel没有运气。 “保存人员”按钮工作正常 - 它采用“SelectedPerson”绑定属性并将其发送到数据库。只是它没有获取更新的组合框值。

我将不胜感激任何帮助SelectedItem/SelectedIndex绑定在组合框中。还有其他建议:我需要一个PersonViewModel包裹Person也许是模特班?我应该在我的帐户上添加“AllCountries”属性吗?PersonListViewModel从 xml 文件中获取并使用它而不是直接使用 xml 文件?

UPDATE:

正如我所怀疑的:魔鬼就在SelectedItem="{Binding Path=XmlCountry, Mode=TwoWay}"环境。

当我更改为:

SelectedItem="{Binding XmlCountry, **UpdateSourceTrigger=PropertyChanged**}"

一切正常。我现在将正确的数据传递给我的“Save Person”方法。但这是我第一次必须设置UpdateSourceTrigger保持视图和视图模型同步......


只需引用上述问题的更新并将其放入实际答案中即可。

魔鬼就在 SelectedItem="{Binding Path=XmlCountry, 模式=双向}”设置。

当我将所选项目绑定更改为:

SelectedItem="{Binding XmlCountry, **UpdateSourceTrigger=PropertyChanged**}"

...一切正常。

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

MVVM WPF ComboBox SelectedItem 绑定未在数据网格内激活 的相关文章

  • 如何设置和更改 WPF 中的文化

    我有一个 NET 4 0 WPF 应用程序 用户可以在其中更改语言 文化 我只是让用户选择一种语言 创建相应的 CultureInfo 并设置 Thread CurrentThread CurrentCulture cultureInfo
  • 指定 Xaml 中开始标记和结束标记之间的属性

    考虑以下 Xaml
  • 是否有其他方法可以在 C# 中使用 WPF 处理 DICOM 图像而无需任何第三方/库?

    我开始从事一个充满挑战的新项目 我正在从事一个医疗项目 我必须读取 DICOM 图像并利用其属性处理图像 我收集了一些关于 DICOM 和 PACS 的基本知识 由于我在 WPF 上工作了大约 2 年的职业生涯 因此我选择使用 C 和 WP
  • 将 RenderTargetBitmap 转换为 System.Drawing.Image

    我有 3D WPF 视觉对象 我想将其传递到 Excel 单元格 通过剪贴板缓冲区 对于 普通 BMP 图像 它可以工作 但我不知道如何转换RenderTargetBitmap 我的代码如下所示 System Windows Media I
  • 如何在fragment中使用ViewModel?

    我正在使用 MVVM 架构 我有一个活动和一些片段 我想在活动中的API中发出请求 然后使用ViewModel 感谢获得的数据 将它们显示在片段中 我该怎么做 我当前的解决方案不起作用 活动 viewModelRoutesFragment
  • wpf中基于绑定bool属性的样式对象

    如何使用 wpf 中的 xaml 更改我在 mvvm 设置中要使用的对象的填充颜色 当绑定的属性设置为 True 时 我想将填充颜色更改为红色 该属性称为 IsRound 如果需要的话我会发布代码 我现在不在电脑上 UPDATED 有人可以
  • WPF DataGrid 双向绑定

    我有财产UserSet其中包含来自ObservableCollection
  • 如何使用 caliburn.micro 绑定到命令属性?

    我的行为公开了多个命令属性 通常 我使用 MVVM Light 只在视图模型中使用路由命令并绑定到这些命令 然而 这个项目正在使用 Caliburn Micro 所以我尝试以 Caliburn Micro 的方式进行操作 我可以在 Mess
  • WPF 数据绑定到字符串属性

    我有一个关于数据绑定的问题 我正在努力解决这个问题 我的 xaml cs 文件中有以下属性 private string stationIdInstruction public event PropertyChangedEventHandl
  • 获取登录用户的 AppData\Local 文件夹

    我目前正在使用 Environment GetFolderPath Environment SpecialFolder LocalApplicationData 检索当前用户的AppData Local小路 该程序需要提升的权限 并且在标准
  • XAML中无限旋转矩形

    如何定义XAML无限旋转矩形 到目前为止 我找到了一个带有代码但没有 xaml 的解决方案 http www codeproject com Articles 23257 Beginner s WPF Animation Tutorial
  • DataGrid 是 WPF 中的必需品吗?

    我看到很多讨论正在进行 人们询问 WPF 的 DataGrid 并抱怨 Microsoft 迄今为止还没有在其 WPF 框架中提供 DataGrid 我们知道 WPF 是一项出色的 UI 技术 并且具有 ItemsControl DataT
  • WPF 在 .NET Framework 4.0 中的 x64 上启动缓慢

    我注意到 如果我为任何 CPU x64 构建 WPF 应用程序 则与在 x86 上启动 在发布和调试模式下 相比 启动 大约 20 秒 或加载新控件所需的时间要长得多 VS 的内部或外部 即使是最简单的 WPF 应用程序也会出现这种情况 该
  • wpf 按钮悬停渐变不起作用

    我在 wpf 中使用带有渐变背景的按钮 但鼠标悬停时背景不起作用 我的代码有什么问题吗
  • “该类型不包含任何可访问的构造函数” - 具有无参数构造函数

    我正在尝试加载一个类作为静态资源
  • C# 组合框使用文本设置值

    我有一个组合框farmRegion我这样填写 private void fillRegionData DataTable dt new DataTable dt Columns Add ID typeof int dt Columns Ad
  • wpf自定义控件:另一个矩形内的可拖动/可调整大小的矩形

    我正在研究一个带有两个矩形的控件 一个在另一个矩形内 我希望用户能够拖动内部矩形 调整其大小 如果可能的话 也可以在外部矩形的边界内旋转它 这些值应该是可绑定的 以便我可以在更新时将这些值存储在我的数据源中 是否已经有这样的控件或者有人有任
  • wpf C# 中的内存泄漏

    我正在使用 GalaSoft MvvmLight 套件和 WPF Toolkit 开发 WPF MVVM v3 5 中 应用程序DataGrid and DatePicker 但是 每次加载应用程序时 我都会面临应用程序中的大量内存泄漏Us
  • WPF 我应该如何评估属性路径?

    我正在编写一个自定义控件 并且我有一个字符串形式的属性路径 认为comboBox SelectedValuePath 代码中评估任意对象的该字符串的最佳方法是什么 显然我可以自己解析它 但这是一个黑客 我希望路径支持一切comboBox S
  • XAML:如何定义要在多个项目中使用的数据模板和样式

    我开始使用 WPF net 3 5 sp1 仅使用 VS 尚未混合 开发桌面应用程序 我现在的情况是 我在几个库中有一些通用的可重用组件 我可以在哪里定义样式和数据模板 以便它们可以在多个项目中重复使用 从而获得一致的外观和感觉 我看过 R

随机推荐

  • 编译 ng-bind-html 后 ng-click 不起作用

    我有一个指令 app directive dir function compile sce return restrict E link function scope element attr scope watch content fun
  • 如何删除Python中的标点符号?

    我有一个问题 前任 我有一句话 s AAA BBB CCC 所以 我这样做 import string table str maketrans string punctuation s w translate table for w in
  • 公开受保护字段的最佳方式

    我有一个像这样的基类 public class BaseModalCommand protected object m commandArgument protected int m commandID protected int m en
  • 暂停脚本执行的 jQuery 确认框

    我正在寻找一个 jquery 漂亮的标准对话框替代品 jQUery UI 有一个很好的功能 但它不会像confirm 那样暂停脚本执行以等待响应 下面的演示应该显示两个 div 显示前面确认框的选择 但 jquery 对话框不会导致脚本等待
  • 如何让子模块触发 Jenkins 构建

    我有一个子模块 A 它不是独立的应用程序 它需要主应用程序才能工作 我想为 A 创建一个 CI 构建 以便每当将提交推送到 A 时 它都会触发使用主项目代码的构建 我该如何在詹金斯中做到这一点 我需要做什么 对 A 的提交会触发构建 该构建
  • Code Golf:重复文本的“颜色突出显示”

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 感谢下面的 greg0ire 帮助理解关键概念 挑战 构建一个程序来查找所有子字符串并使用颜色属性 标记 它们 在 XML 中有效
  • 将单个 Excel 工作表另存为 CSV

    我需要解析 Excel 工作表 现在 我将每个单独的工作表另存为 csv 效果非常好 我使用 OpenCSV 来解析文件等 但创建这些 csv 文件很痛苦 在 Excel 中将单个工作表另存为 csv 的最简单 最快捷的方法是什么 我假设某
  • 使用 Shadow DOM 有哪些缺点?

    在教程中我只看到了 Shadow DOM 的优点 但也应该有缺点 在哪些情况下我们应该避免使用 Shadow DOM Shadow DOM 功能既可以被视为优点 也可以被视为缺点 风格隔离如果您想要的话 这是一个好处 但如果用户想从全局 C
  • 从预处理器中的常量中删除强制转换

    背景 在微控制器代码中 我使用生产商提供的库 其中定义了许多常量 如果我的一些常量 与微控制器外部的组件共享 与git subtree 和微控制器常数 例如 该库定义 ifdef SOME PARTICULAR MODEL define F
  • SSRS 2008 R2 - SSRS 2012 - ReportViewer:在 Safari/Chrome 中报告,但在 Firefox/Internet Explorer 8 中工作正常...为什么?

    我有一些简单的报告SSRS 2008 R2 但它们根本不会在 Safari 或 Chrome 中显示 根据微软的在线图书 这些浏览器的支持方式有限 但是 数据 加载 时钟完成后我看不到任何内容 页面顶部的参数栏和面包屑导航部分都在那里 此外
  • 仍然对 Python 中的可变默认参数值“陷阱”感到困惑[重复]

    这个问题在这里已经有答案了 我知道不应该使用可变的默认参数值在 Python 中 有一些例外 因为该值仅在定义函数时计算和存储一次 而不是在以后每次调用函数时计算和存储 我对此的理解是这样的 使用下面的例子 请原谅我的不精确的语言 因为我只
  • 仅将 dropShadow 添加到网格窗格 JavaFx 2.2 的边框

    只想将阴影添加到网格窗格的边框而不是内部子元素 here is the image of screen showing the effect 使用 StackPane 并将 GridPane 放入其中 使用 CSS 设置 StackPane
  • 动态改变colors.xml的值来改变android应用程序的外观和感觉

    问题 我正在尝试动态更改 Android 应用程序的外观和感觉 例如 应用程序启动并从服务器获取一组值 这些值是通常位于colors xml 中的元素 我正在寻找的是一种动态更改colors xml 中的元素并使用从服务器接收到的这些新值进
  • 如何使用 Delphi 中的当前区域设置格式化整数

    var i integer i 1234567 鉴于上述情况 我希望字符串 1 234 567 作为输出 假设英国区域设置 IntToStr 只是给我 1234567 我确信有一个单行线可以解决这个问题 但我找不到它 尝试格式化功能 Lab
  • 如何保留嵌入小部件的样式?

    如何制作外部PHPwidget页面有自己的CSS 问题是 当外部页面是included 它受到样式表的影响host page 包含的页面实际上是一个注释 小部件 带有自己的 css 文件 大约 30 行 不多 并且高度和宽度的灵活性是必须具
  • 如何将Jupyter笔记本上的环境切换为新笔记本?

    我有一个具有各种环境的实例 有些笔记本与不同的环境兼容 例如notebook1 用于 MXNet notebook2 用于 Tensorflow 从notebook1移动到notebook2时如何跳转到新环境 我尝试这样做 但这不适用于 J
  • 是否可以使用与 std::set 中包含的类型不同的元素来执行搜索和删除?

    假设我有以下内容 struct MetadataThingy void actual thingy int some metadata int more metadata bool operator lt MetadataThingy co
  • @media print 的 CSS 第 x 页(共 y 页)

    我将在这个问题的前言中说 我知道这个问题之前已经被问过 但我能找到的所有答案似乎都引用了一个不再有效的过时的解决方案 至少在 Firefox 56 64 位 中 过时的方法是 曾经有一个自动实例化的 CSS 计数器 名为pages 因此从该
  • 向每个团队成员发送成功自动化构建的通知

    我们只是将 Visual Studio Team Services 集成为我们的新工作流程 并在提交到 master 的基础上设置自动构建 目前 承诺掌握并发起新构建的个人将在构建失败或成功时收到通知电子邮件 我们以为我们都会收到通知 但事
  • MVVM WPF ComboBox SelectedItem 绑定未在数据网格内激活

    在数据网格内操作时 我一直在努力保存组合框选定的值 当我制作没有数据网格的测试解决方案时 一切正常 上下文是与相关国家的人名 国家 地区存储在 xml 文件中 这是初始视图的快照 您可以在此处看到PersonList xaml 的重要部分