绑定到 ItemsControl 中的 CurrentItem

2023-12-03

下面的 XAML 基本上是试图列出以下内容Buttons(由Name中对象的属性Views当前集合DataContext.

当我点击一个按钮时CurrentItem的财产CollectionViewSource应该改变和相关的View应显示在内容演示器中。

好的。如果我点击ListBox在下面的 XAML 中,它完全按照预期工作。

但是,如果我单击UniformGrid(由项目控件创建)CurrentItem属性未更新。

我如何获得CurrentItem在选择项目时更新ItemsControl?

Thanks

<UserControl x:Class="Pos.Features.Reservation.ReservationView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:product="clr-namespace:Pos.Features.ProductBrowser"
             xmlns:activity="clr-namespace:Pos.Features.ActivityBrowser"
             xmlns:addbysku="clr-namespace:Pos.Features.AddBySku"
             xmlns:client="clr-namespace:Pos.Features.ClientBrowser"
             xmlns:notes="clr-namespace:Pos.Features.Notes"
             xmlns:controls="clr-namespace:Pos.Views"
             xmlns:res="clr-namespace:Pos.Core;assembly=Pos.Core"
             Height="300" Width="300">
    <UserControl.Resources>
        <DataTemplate DataType="{x:Type product:ProductBrowserViewModel}">
            <product:ProductBrowserView/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type activity:ActivityBrowserViewModel}">
            <activity:ActivityBrowserView/>
        </DataTemplate>

        <CollectionViewSource x:Name="x" x:Key="ViewsCollection" Source="{Binding Views}"  />
    </UserControl.Resources>

    <StackPanel>
        <ListBox Name="ListBoxMenu" Grid.Column="0" Margin="5" ItemsSource="{Binding Source={StaticResource ViewsCollection}}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}" Padding="10"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <ContentControl Grid.Column="1" Content="{Binding ElementName=ListBoxMenu, Path=SelectedItem}"/>
        <ItemsControl  Grid.Column="2" Name="ViewList" ItemsSource="{Binding Source={StaticResource ViewsCollection}}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Button>
                        <TextBlock Text="{Binding Path=Name}" Name="txtButtonLabel" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Black"/>
                    </Button>
                </DataTemplate>                
            </ItemsControl.ItemTemplate>
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <UniformGrid Rows="1" Columns="{Binding Views.Count}"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
        <ContentControl Grid.Column="3" Content="{Binding Source={StaticResource ViewsCollection}, Path=CurrentItem}"/>
        <Button Grid.Column="4" Click="Button_Click">dsadsd</Button>
    </StackPanel>
</UserControl>

你的按钮没有任何作用。通常,您的 ViewModel 会有一个名为 Select(或类似名称)的 ICommand,按钮将绑定到该 ICommand

Command="{Binding Select, ElementName="root"}"

然后将实例传递给您想要选择的 ICommand

CommandParameter="{Binding}"

它看起来像这样(c#/XAML 类似伪代码):

public class MyModel { public string Name {get;set;} }

public class MyViewModel
{
  public ObservableCollection<MyModel> Models {get;set;}
  public ICommand Select {get;set;}
  /* configure Models and Select etc */
}

<UserControl DataContext="{StaticResource MyViewModelInstance}" x:Name="root">
<ItemsControl ItemsSource="{Binding Models}">
  <ItemsControl.ItemTemplate>
    <ItemsPanelTemplate>
      <Button Text="{Binding Name}" 
      Command="{Binding Select, ElementName="root"}"
      CommandParameter="{Binding}"/>
   </ItemsPanelTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>
</UserControl>

The 项目控制绑定到Models,所以每个MyModel in Models得到一个按钮。按钮文本绑定到属性Name。按钮命令绑定到SelectViewModel 中的属性。当按下按钮时,它会调用 ICommand,在实例中发送MyModel按钮所绑定的。

请注意,在UserControl is a 代码气味. UserControls 应该像所有其他控件一样向用户显示——它们应该具有可绑定的公共属性,这些属性绑定到用户的视图模型, 不是你的。然后,您可以绑定到这些属性的值UserControl。对于此示例,您将有一个项目来源您定义的属性UserControl,以及ItemsControl将绑定到此属性而不是视图模型直接地。

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

绑定到 ItemsControl 中的 CurrentItem 的相关文章

  • 使用 MVVM 在 WPF 中进行 COMBOBOX 过滤

    我正在使用 WPF mvvm 方法开发一个应用程序 我有一个要求 必须在组合框中显示项目列表以供选择 基于一些标志 我需要从组合框中过滤掉一些项目以供选择 我尝试使用两种不同的项目源 一个具有完整列表 另一个具有过滤列表 并基于我想要更改项
  • 使用引用的 ItemsSource 绑定到 SelectedItem

    Intro 我有一个不同的数据源池 我有口罩 面具有索引线 每个 Indexline 都有一个来自关联池的数据源 Classes public class DataSource public string Name get set publ
  • WPF TreeView 绑定[重复]

    这个问题在这里已经有答案了 我有一个带有父级和子级属性的课程 ADO NET 实体框架分层页面类 http img148 imageshack us img148 6802 edmxxe8 gif http img148 imageshac
  • 处置 StreamResourceInfo.Stream

    I use StreamResourceInfo Stream to get BitmapImage来自资源 是否正确Close and Dispose使用后的流 我问这个问题是因为在内存分析器中 如果这样做我会收到错误 内存分析器表示已处
  • WPF 网络浏览器在 Adob​​e 阅读器窗口中打开 PDF 文件

    我正在创建一个 32 位 WPF 应用程序 它需要在 WebBrowser 控件中显示创建的 PDF 在做的同时 WebBrowser Navigate new Url D TestPDF MyDocument pdf 它在 Adob e
  • WPF - 将窗口置于前面

    我有一个 WPF 窗口 我没有关闭它 相反 我执行 Hide 和 Show 它 现在 当我双击记录上网格中的主窗口时 这将触发 Show 窗口 该窗口将始终显示在主窗口后面 我尝试过以下方法 但没有成功 view Show view Act
  • WPF 中的数据绑定?

    我正在尝试在 WPF 中设置数据绑定 我有班级人员 它通过一个文本框进行更新 类似老式的 另一个文本框应该通过数据绑定镜像对人员对象的更改 它曾经是 type twoway 但抛出了xamlparse 异常 它不是这样工作的 点击显示 pe
  • WPF - 在样式中使用 ControlTemplate 资源

    创建样式时 是否可以将 ControlTemplate 属性设置为先前定义的资源 例如 如果我在 ResourceDictionary 中有以下内容
  • 传递给命令 WPF 的多个参数[重复]

    这个问题在这里已经有答案了 我有以下层次结构 abstract class TicketBase public DateTime PublishedDate get set class TicketTypeA TicketBase publ
  • WPF 组合框如果只有 1 项则自动选择

    我有一个组合框 我绑定到一个可观察的集合 它会发生变化 根据选择的公司 并且大量公司将有一个帐户 项目 因此我想知道制作组合框的最佳方法是什么如果 ItemsSource 中只有 1 个项目 则设置 SelectedItem 否则将其保留为
  • WPF - 检测鼠标按下一段时间

    检测鼠标按钮何时在特定元素上按住特定时间段的最佳方法是什么 感谢您的提示 我创建了一个附加属性以避免任何代码隐藏 using System using System Windows using System Windows Threadin
  • 如何在 WPF 中实现虚线或点线边框?

    我有一个ListViewItem我正在申请Style到 我想把灰色虚线作为底部Border 我怎样才能在 WPF 中做到这一点 我只能看到纯色画笔 这在我们的应用程序中效果很好 允许我们使用真正的边框而不是乱用矩形
  • 转换BitmapImage后内存未释放

    我遇到以下 C 测试 代码的问题 public static void TestBitmap2ByteArray BitmapImage bitmap JpegBitmapEncoder encoder new JpegBitmapEnco
  • 如何在wpf中打印屏幕截图

    首先我英语说得不太流利 反正 我正在尝试这样做 然而这还不是第三天 我现在正在做的是屏幕捕获后的程序屏幕打印 我参考这段代码 https social msdn microsoft com Forums windows en US 0623
  • 重写 WPF 工具包图表中的 DataPointStyle

    我想覆盖DataPointStyle of the LineSeries在我的 WPF 工具包中Chart
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu
  • NHibernate、数据绑定到 DataGridView、延迟加载和会话管理 - 需要建议

    我的主应用程序窗体 WinForms 有一个 DataGridView 它使用 DataBinding 和 Fluent NHibernate 显示 SQLite 数据库中的数据 该表单在应用程序运行的整个过程中都是打开的 出于性能原因 我
  • ItemSource 中具有不同类型数据的 ListView 多行列标题

    继续this https stackoverflow com q 26712051 1997232问题 我想实现这种ListView 它应该有两件事 多行列标题 不同的数据类型通过绑定ItemsSource以不同方式显示 为了解决 1 我尝
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • VisualStateManager 和生成的转换

    正当我以为我明白的时候VisualStateManager 有些事情证明我错了 我正在使用 WPF 4 并且尝试简单地在鼠标悬停时放大某个项目 并在鼠标离开时将其缩小 我想我只需定义每个状态VisualStateGroup然后指定一个Vis

随机推荐

  • 为什么 Firefox 和 Opera 会忽略 display: table-cell 内部的最大宽度?

    以下代码在 Chrome 或 IE 中正确显示 图像宽度为 200 像素 在 Firefox 和 Opera 中max width风格被完全忽略 为什么会发生这种情况 有没有好的解决办法 另外 哪种方式最符合标准 Note 对于这种特殊情况
  • 检查对象中的任何属性是否为零 - Swift 3

    我正在使用 Swift 3 想知道是否有任何方法可以检查对象中的所有属性是否都有值 nil Eg class Vehicle var name String var model String var VIN String let objCa
  • “无法实例化名为 UITableViewCellContentView 的类”iPhone 3.1.2

    我已经为自定义 UITableView 单元创建了一个笔尖 并按照文档和不同的教程来解决此错误 并且它不会停止 我研究了这个错误 人们说这是当你 import 标头但没有添加框架时发生的 好吧 UIKit 是自动添加的 我删除并再次添加它以
  • 呈现图像裁剪界面

    我正在尝试设计一个用于在 iPhone 操作系统中裁剪图像的 UI 并怀疑我正在以困难的方式处理事情 我的目标与 Tapbots 二人组使用 Pastebot 所做的差不多 在该应用程序中 它们使源图像变暗 但提供可移动且可调整大小的裁剪视
  • 为什么 Dispatcher.BeginInvoke 会为 ThreadStart 解包 TargetInitationException 而不是为 Action 解包?

    考虑以下两个应用 1 public partial class MainWindow Window public MainWindow InitializeComponent this Dispatcher UnhandledExcepti
  • 如何在Django REST框架中注册用户?

    我正在编写 REST APIDjango REST 框架 该 API 将成为社交移动应用程序的后端 遵循教程后 我可以序列化所有模型 并且能够创建新资源并更新它们 我正在使用 AuthToken 进行身份验证 我的问题是 一旦我有了 use
  • WebRTC 与 PeerJS:iceConnectionState 已断开连接?

    我的每台机器上都有一个节点应用程序正在运行这个例子在本地主机上使用我制作的 PeerServer 密钥 当我尝试在两者之间发起呼叫时 连接就会建立 例如 接收方说它接到了发送方的呼叫 但是 媒体流也会启动 视频 div 中显示黑框 然后连接
  • HTTP 状态 500 - Servlet 执行引发异常

    我在 servlet 中调用 java 类时收到此错误 这是错误 type Exception report message Servlet execution threw an exception description The serv
  • UIButton 框架不会随着使用 Swift 5 的可访问性大字体而增加

    UIButton 标题 body 或 headline 的大辅助字体大小不会增加按钮的框架 而只会增加标题文本 从下面的截图中可以清楚地看到 约束只有顶部 前导和尾随 也在代码中我添加了两行 button adjustsImageSizeF
  • MySQL 中的排序/排序

    我在尝试对表格内容进行排序时遇到一些问题programs按列prog id它以以下格式保存每个程序的 id prog id 1 0 1 1 0 2 1 0 3 1 0 10 1 0 11 1 1 0 1 1 1 等 当我按 prog id
  • 在 unix shell 中更改目录(特殊字符)

    我的目录名称以 开头 怎么用cd进入呢 基本转义字符不起作用 cd smol bash cd invalid option cd usage cd L P e dir cd smol bash cd invalid option cd us
  • 如何更改引用 dll 复制到的位置?

    我正在使用一些库 并且添加了对该库 dll 的引用 并将 复制本地 设置为 true 但我想将dll的位置更改为exe文件夹中的子文件夹 而不是与exe一起 这怎么可能 thanks Update 我使用了以下构建后事件 如 Jon Ske
  • 将 Outlook 暂停指定时间

    我尝试在收到电子邮件 10 秒后运行 Outlook 代码 我尝试使用application wait但您似乎无法使用 Outlook 执行此操作 如何将 Outlook 暂停指定的时间 您可以创建一个 Sub 来模仿Application
  • 从简单列表创建下拉菜单

    我当前的列表如下所示 ul li a href Menu 1 a li li a href Submenu a a li li a href Submenu b a li li a href Submenu c a li li a href
  • 使用 Django REST 框架 Render 返回图像

    我使用上传图像Django REST 框架 现在我试图返回与响应相同的图像 views py class ImageUploadView viewsets ModelViewSet queryset ImageModel objects a
  • ASP.NET网站的BIN目录和引用

    想象一下以下解决方案 网站 ABC com 非 Web 应用程序 BLL 单独程序集中的业务逻辑层 DTO 自己程序集中的 dto 对象 DAL 也在其自己的程序集中的数据访问层 BLL 引用了 DAL BLL 引用了 DTO 层 网站项目
  • 使用 CSS 缩小图像……图像在多个浏览器中变得模糊

    我在多个浏览器中遇到缩小 IMG 的问题 图像需要缩小 因为它们响应浏览器大小 这是我的代码 pic holder img moz transform rotate 0deg image rendering webkit optimize
  • Kubernetes 未知领域“行为”

    我正在 Kubernetes 中创建 Horizo ntalPodAutoscaler 我需要将缩减稳定窗口配置为小于默认值 使用的代码和错误如下 apiVersion autoscaling v2beta2 kind Horizontal
  • 在pyspark中不使用pivot进行分组的有效方法

    我有一个查询 需要使用 pyspark 计算内存利用率 我已经使用pivot 使用 python pandas 实现了这一点 但现在我需要在 pyspark 中执行此操作 而旋转将是一个昂贵的功能 所以我想知道 pyspark 中是否有任何
  • 绑定到 ItemsControl 中的 CurrentItem

    下面的 XAML 基本上是试图列出以下内容Buttons 由Name中对象的属性Views当前集合DataContext 当我点击一个按钮时CurrentItem的财产CollectionViewSource应该改变和相关的View应显示在