使用 MVVM 处理 SelectedItem 事件的最简单方法是什么?

2023-12-22

在下面的代码中,当用户选择客户时在组合框中,显示客户姓名在文本框中。我在 ViewModel 上使用 ObservableCollection 属性填充 Combobox,但如何处理 ViewModel 中的 SelectedItem 事件?

使用隐藏代码很容易实现这一点,如下所示,但是我如何使用 MVVM 模式做到这一点?

我目前有委托命令 and 依恋行为在我可以使用的基本 MVVM 模板中,但我不知道如何在“组合框选择一个新项目”时触发它们。

View:

<Window.Resources>
    <DataTemplate x:Key="CustomerTemplate">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding LastName}"/>
        </StackPanel>
    </DataTemplate>
</Window.Resources>

<DockPanel LastChildFill="False" Margin="10">
    <ComboBox 
        x:Name="CustomerList"
        ItemTemplate="{StaticResource CustomerTemplate}"
        HorizontalAlignment="Left"
        DockPanel.Dock="Top" 
        Width="200"
        SelectionChanged="CustomerSelected"
        ItemsSource="{Binding Customers}"/>

    <TextBlock x:Name="CurrentlySelectedCustomer"/>
</DockPanel>

背后代码:

private void CustomerSelected(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
    Customer customer = (Customer)CustomerList.SelectedItem;
    CurrentlySelectedCustomer.Text = String.Format("{0} {1}", customer.FirstName, customer.LastName);
}

您应该能够将 ViewModel 中的属性绑定到组合框的 SelectedItem 属性。如果将其设置为双向绑定,当 SelectedItem 更改时您将收到通知,因为它将触发属性上的 set 方法。

视图模型:

public ObservableCollection Customers
{
   get { return _customers; }
   set
   {
       if (_customers != value)
       {
           _customers = value;
           OnPropertyChanged("Customers");
       }
   }
}

public Customer SelectedCustomer
{
   get { return _selectedCustomer; }
   set
   {
       if (_selectedCustomer != value)
       {
           _selectedCustomer= value;
           LastName= value.LastName;
           OnPropertyChanged("SelectedCustomer");
       }
   }
}

public Customer LastName
{
   get { return _lastName; }
   set
   {
       if (_lastName!= value)
       {
           _lastName= value;
           OnPropertyChanged("LastName");
       }
   }
}

Xaml:

<DockPanel LastChildFill="False" Margin="10">
    <ComboBox 
        x:Name="CustomerList"
        ItemTemplate="{StaticResource CustomerTemplate}"
        HorizontalAlignment="Left"
        DockPanel.Dock="Top" 
        Width="200"
        SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"
        ItemsSource="{Binding Customers}"/>

    <TextBlock x:Name="CurrentlySelectedCustomer"
               Text="{Binding LastName}"/>
</DockPanel>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MVVM 处理 SelectedItem 事件的最简单方法是什么? 的相关文章

  • C# 线程安全(特别是 MVVM/WPF)

    我想知道我需要做什么才能使模型在 MVVM 中线程安全 假设我有以下类 它被实例化为单例 public class RunningTotal INotifyPropertyChange private int total public in
  • 如何设置和更改 WPF 中的文化

    我有一个 NET 4 0 WPF 应用程序 用户可以在其中更改语言 文化 我只是让用户选择一种语言 创建相应的 CultureInfo 并设置 Thread CurrentThread CurrentCulture cultureInfo
  • WPF:路由事件还是常规事件?

    在 WPF 中 我们有路由事件 什么时候应该使用这些来代替常规事件 路由事件具有特殊的行为 但如果您在引发事件的元素上处理事件 则该行为在很大程度上是不可见的 如果您使用任何建议的方案 路由事件就会变得强大 在公共根定义公共处理程序 组合您
  • 如何在fragment中使用ViewModel?

    我正在使用 MVVM 架构 我有一个活动和一些片段 我想在活动中的API中发出请求 然后使用ViewModel 感谢获得的数据 将它们显示在片段中 我该怎么做 我当前的解决方案不起作用 活动 viewModelRoutesFragment
  • 从 WPF 窗口中删除图标

    我可以使用 WinApi 从 WPF 窗口中删除窗口图标 但是当我仅运行 WPF 项目的可执行文件时 我会在应用程序窗口中再次获得该图标 如何删除该图标 From WPF教程 http www wpftutorial net RemoveI
  • 获取我“单击”/“mousedown”的元素的名称

    我有一个页面 其根元素是一个名为的网格Root 我有很多控件 比如TextBlock TextBox Grid Rectangle Border等等 谁是孩子Root 现在 我想要一个MouseDown or PreviewMouseDow
  • 如何覆盖全局样式(没有 x:Key),或者将命名样式应用于所有类型目标控件?

    我声明了一个要应用于项目中所有按钮的样式 该样式位于 ResourceDictionary 中 现在 在某个窗口中 我想继承此样式但添加一个值
  • MVVM基础视图模型类

    我正在努力创建一个基本视图模型类 ViewModelBase 是一个抽象类 我想定义我希望所有其他派生视图模型实现的属性 其中一个属性是 ObservableCollection public abstract ObservableColl
  • 使用 MVVM 时 XamDataGrid 列可见性不起作用

    我正在尝试在 MVVM 架构中实现 XamDataGrid 列可见性 但它似乎不起作用 我正在执行以下操作 为未绑定字段添加可见性属性
  • WPF 依赖项属性:为什么需要指定所有者类型?

    这就是我注册的方式DependencyProperty public static readonly DependencyProperty UserProperty DependencyProperty Register User type
  • DockPanel 选项卡顺序

    我在 ItemsControl 的 DataTemplate 中设置了一个 DockPanel 如下所示
  • wpf C# 中的内存泄漏

    我正在使用 GalaSoft MvvmLight 套件和 WPF Toolkit 开发 WPF MVVM v3 5 中 应用程序DataGrid and DatePicker 但是 每次加载应用程序时 我都会面临应用程序中的大量内存泄漏Us
  • 在 SVG 中旋转形状时保持旋转线性渐变不旋转

    SVG 或 WPF XAML 我对两者都持开放态度 并且需要 我不认为它们在实现上有任何不同 下面的示例是 SVG 中的 我试图找到一种在线性渐变上使用旋转的方法 在本例中为 270 但是当它填充的形状旋转时 保持线性渐变不变 就好像它填充
  • WPF 我应该如何评估属性路径?

    我正在编写一个自定义控件 并且我有一个字符串形式的属性路径 认为comboBox SelectedValuePath 代码中评估任意对象的该字符串的最佳方法是什么 显然我可以自己解析它 但这是一个黑客 我希望路径支持一切comboBox S
  • 如何检查应用程序的另一个实例是否正在运行[重复]

    这个问题在这里已经有答案了 有人可以展示如何检查程序的另一个实例 例如 test exe 是否正在运行 如果是 则停止加载应用程序 如果存在该实例 想要一些严肃的代码吗 这里是 var exists System Diagnostics P
  • 当 View 被渲染/实例化时通知 ViewModel

    我有一个自定义用户控件 ChartControl 我在我的 WPF 应用程序中使用 MainApp 我渲染如下
  • XAML:如何定义要在多个项目中使用的数据模板和样式

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

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 配置 2 在按钮 swiftUI 中发出警报消息

    我要学习 swift 和 swiftUI 我申请按类别整理笔记 如果需要的话 你可以在我的 GitHub 中找到我的项目 https github com yoan8306 List Notes https github com yoan8
  • 在wpf中移动鼠标

    我目前正在寻找一种在 wpf 中移动鼠标的方法 我发现的只是我无法可靠实现的非托管方法调用 有没有一种简单的方法可以将鼠标光标移动到某个地方 即 双击后 我肯定在这里遗漏了一些东西 添加对System Windows Forms dll的引

随机推荐

  • ListBox 中的“Items.Clear()”后“SelectedIndexChanged”未触发

    对于列表框 选择模式设置为 一 我希望跟踪是否有选定的项目或没有选定的项目 为此 我订阅了 SelectedIndexChanged 的 方法并检查 SelectedIndex 是否为 1 但是 我注意到调用 Items Clear 后该事
  • 在 ExtJS 中突出显示/选择网格行

    我是 Ext JS 的新手 我正在开发一个网格面板 当我选择 单击任何行时 与所选行相关的某些数据将显示在网格下方的面板中 此外 当加载窗口时 默认情况下应选择 突出显示第一个窗口 目前网格和面板已正确显示 即使与所选行相关的数据也会显示在
  • Angular2 FileSaver.js

    我将 FileSaver js 与 Angular 2 一起使用 效果很好 但是 我在构建中遇到语义错误 错误 TS2304 找不到名称 saveAs 我正在使用 Angular 2 种子并将库添加到我的 project config 中
  • Apache Ivy:本地ivy缓存和本地存储库之间的区别

    默认情况下 ivy 在你的目录下安装了一个 本地缓存
  • iOS是静态框架还是动态框架?

    这可能听起来像一个愚蠢的问题 但如果您有第三方 Party framework 文件 您能判断它是静态还是动态吗 我的意思是 如果你往里面看 它们看起来有什么不同吗 两者都可以 然而 只有 iOS8 才允许应用程序包中使用动态框架 找出答案
  • WPF DependencyObject 调用线程异常

    我有以下代码 它创建一个临时文件夹 并使用 FileSystemWatcher 轮询添加到 Location 属性上的文件夹中的文件 并将它们添加到列表中 Pastebin 上的 Scratchdisk cs http pastebin c
  • Javascript 动态创建函数列表

    我有一块JavaScript我想要创建函数列表的代码 所有的函数都会被放入字典中d d a 会给我这个功能function console log a and d b 会给我这个功能function console log b 等等 这是我
  • 图灵机的时间复杂度和空间复杂度

    我认为图灵机的时间复杂度和空间复杂度的定义是相同的 我无法区分 它们之间 请帮我 谢谢 对于图灵机 时间复杂度是当机器根据某些输入启动时磁带移动的次数的度量 空间复杂度是指机器运行时写入磁带的单元数 The time complexity
  • 获取 Adob​​e Air 中的当前操作系统

    我正在使用 Adob e Flex Air 制作一个应用程序 我想知道是否有任何方法可以获取 Air 应用程序运行的操作系统 Use 能力 http livedocs adobe com flex 3 langref flash syste
  • “活动(调试)”与“调试”

    Visual Studio 调试器 C 调试配置的项目设置 视觉工作室2010 http msdn microsoft com en us library 2kf0yb05 aspx 视觉工作室2008 http msdn microsof
  • 为什么我的 Spring ContextRefreshedevent 被调用两次?

    我注册了一个 Spring ApplicationListener bean 来侦听 ContextRefreshed 事件 但出于某种奇怪的原因 我得到two致电onApplicationEvent ContextRefreshedEve
  • 如何确定一个数字中的所有设置位是否也在另一个数字中设置?

    给定 2 个二进制字符串a and b相同长度 例如111000 and 110000 是否可以检查是否所有设置位b也设置在a使用按位运算 在上面的例子中 b 110000在位置 1 和 2 从左到右 有两个设置位 这些位也设置在a 111
  • 计算价格并显示在 WooCommerce 产品单页上的价格下(简单价格、可变价格)

    我计划在我的 WooCommerce 产品页面上显示所有产品的新价格 这是每月的分期付款价格 我需要以低于正常价格 可变价格和简单价格 的价格显示此内容 如下所示 0 利息分期付款 3 093 卢比起 其中 3 093 卢比是新价格 这是我
  • PHP NTLM身份验证+soap客户端

    我遇到了一个需要实现受 NTLM 身份验证保护的 Web 服务的项目 我通过 PHP 尝试过SoapClient client new SoapClient http hostname com webservice array cache
  • 表达式 *p++ 和 ++*p 的工作方式有何不同

    include
  • 查找一对列中的最大值/最小值

    我的数据如下所示 df lt tribble A B 0 2 0 1 0 2 0 3 0 5 0 1 0 7 0 9 0 8 0 9 0 4 0 2 我如何选择之间的最大 最小值A and B 期望的输出 A B C 1 0 2 0 1 0
  • 如何获取设备的设备接口 GUID?

    我枚举了机器上的所有设备 如下所示 HDEVINFO hDevList SetupDiGetClassDevs NULL NULL NULL DIGCF DEVICEINTERFACE DIGCF PRESENT DIGCF ALLCLAS
  • Selenium:清除 chrome 缓存

    在我的应用程序中 我需要一种方法在注销之前仅清除 chrome 浏览器的缓存 cookie 除外 我不想删除 cookie 任何人都可以建议我一种方法来单击 chrome 中的 清除数据 按钮 我写了下面的代码 但代码不起作用 配置 Chr
  • ASP.net 2.0 版是什么意思?

    ASP NET 2 0 版到底是什么意思 它是符合 net CLR version 2 0 的版本吗 aspnet isapi dll 和 aspnet wp exe 怎么样 它们如何适应 net 框架 1 1 2 0 3 5 版本 NET
  • 使用 MVVM 处理 SelectedItem 事件的最简单方法是什么?

    在下面的代码中 当用户选择客户时在组合框中 显示客户姓名在文本框中 我在 ViewModel 上使用 ObservableCollection 属性填充 Combobox 但如何处理 ViewModel 中的 SelectedItem 事件