绑定到 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 的相关文章

  • 为什么在 Windows 中缩放 WPF 应用程序时会看到像素?

    我使用 WPF 为随机应用程序开发了一个 GUI 我在应用程序窗口上放置了一堆开箱即用的 WPF 控件 我没有定制任何东西 没有使用位图等 在 Windows 7 中运行我的应用程序并使用放大镜应用程序进行缩放时 Win key Plus
  • 如何在 WPF 中设置覆盖全局样式的特定控制元素设置?

    我通过应用程序范围的资源字典为应用程序中的按钮定义了全局样式 样式如下所示 来自另一个 SO 示例
  • WPF 缩放变换和 ScrollViewer - 缩放时无法滚动超出原始大小

    我在 ScrollViewer 中有一个 StackPanel 我有一个滑块 可以在堆栈面板上进行缩放变换 以允许放大和缩小功能 问题是 当我放大时 滚动查看器不会将内容视为 更大 因此 如果我滚动一点并尽可能向右滚动 它会在我到达内容末尾
  • 如何在Phone类库项目中添加ResourceDictionary并访问它

    我正在开发一个项目 其中我有一个引用图书馆项目的子项目 在我的库项目 电话类库 中 如何创建 ResourceDictionary xaml 其中我需要添加一些样式并在 xaml 文件和 cs 文件中使用它 我需要访问 xaml 文件中的
  • WPF DataGrid 选定项

    我有一个 DataGrid 用户可以通过在最后一行输入数据来添加项目 我还有一个按钮可以删除当前选定的项目 但是 当选择最后一行 空 用于添加新项目 时 最后选定的项目将保留在 SelectedItem 中 因此 如果我打开窗口 选择最后一
  • 从 BitmapImage 获取支持的图像格式

    如何获取 System Windows Media Imaging BitmapImage 支持的图像格式列表 我正在用 C WPF 编写一个简单的图像处理工具 BitmapImage 类是更有用的位图类之一 因为它能够从多种格式进行解码
  • Web浏览器控件:如何捕获文档事件?

    我正在使用 WPF 的 WebBrowser 控件加载一个简单的网页 在这个页面上我有一个锚点或一个按钮 我想在我的应用程序后面的代码中 即在 C 中 捕获该按钮的单击事件 WebBrowser 控件是否有办法捕获加载页面元素上的单击事件
  • 如何使用 WPF 用户控件关闭父窗口

    假设我有两个 WPF 窗口 window One 和 window Two window One 有一个按钮 单击此按钮将打开 window Two window Two contains a User Control 该用户控件有一个用于
  • WPF 对 DataGrid 内的 TextBlock 进行全局样式设置

    我遇到了一个非常奇怪的问题 我正在尝试将全局样式应用于一个中的多个控件DataGrid 它们中的大多数完全按照我的预期工作 然而 对于TextBlock永远不会被应用 样式为ComboBox TextBox Label 和其他几个都被应用到
  • 使用 WPF 动态加载内容

    好的 我有一个容器 我为其创建了两个数据模板 基本上 一个模板将显示 5 个文本框 其中包含绑定到它们的对象数据 另一个模板将显示一个用于添加该特定对象的按钮 我对 DataTemplateSelector 进行了子类化 它可以工作 但是当
  • 用于添加新实体的 MVVM WPF ViewModel

    我对 WPF 中的 MVVM 的概念是 我们为应用程序中的每个模型都有一个 ViewModel 这意味着如果我们有 Customer 类 实体 那么我们将有 CustomerViewModel CustomerViewModel 将具有代表
  • 为什么我的 WPF 复选框绑定不起作用?

    我正在使用 MVVM VS 2008 和 NET 3 5 SP1 我有一个项目列表 每个项目都公开一个 IsSelected 属性 我添加了一个复选框来管理列表中所有项目的选择 取消选择 更新每个项目的 IsSelected 属性 一切正常
  • 使用 WPF 网络浏览器以及带有斜体标签和阿拉伯文本的 HTML 时出现奇怪的字符

    我无法弄清楚这个 但我在下面做了一个简单的演示 当在 IE 或 Edge 中查看此页面时 它会正确呈现 我尝试过不同的编码 如 utf 16 Windows 1252 但没有成功 对我来说 看起来像是 WebBrowser 控件的问题 有人
  • WPF 画布缩放/变换以适合

    我重新发布这个问题 因为上次我没有得到太多答复 希望重新措辞可能有所帮助 本质上 我想做的是创建一个数据绑定画布 它将自动缩放其内容以 填充 可用空间 有点像缩放以适应操作 不幸的是 我的 WPF 技能还不是很强 我正在努力弄清楚如何完成最
  • WPF 中的填充弧

    I am trying to draw a figure something like this 我需要为每个弧段都有一个独特的元素 我可以根据需要处理事件并重新着色 我有点不确定如何在 WPF 中创建正确的几何图形 我可以根据圆的半径和与
  • 从BackgroundWorker线程更新图像UI属性

    在我正在编写的 WPF 应用程序中 我有一个 TransformedBitmap 属性 该属性绑定到 UI 上的 Image 对象 每当我更改此属性时 图像就会更新 因此显示在屏幕上的图像也会更新 为了防止在检索下一张图像时 UI 冻结或变
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl
  • 是否可以“缩放”WPF RichTextBox 中的文本?

    我注意到 WinForms RichTextBox 有一个ZoomFactor我认为这正是我想要的属性 不幸的是 WPF 变体似乎完全缺少此属性 有什么方法可以实现相同的功能 增加 减少整个文档的可见文本大小而不实际更改底层 RTF Upd
  • 为什么Windows 7无法加载程序集PresentationFramework.Aero2?

    我最近完成了我使用 Windows 8 开发的第一个 WPF 应用程序 它在我的机器上运行良好 我的一个朋友也在他的 Windows 8 机器上的 Visual Studio 中运行了它 并且成功了 我在我的机器上使用单击一次安装该程序 它
  • 当 ValidationRules 无法共享时,在 DataTemplates 中重新使用绑定实例

    我正在寻找解决方案和 或为什么在 DataTemplate 中共享 Binding 实例背后的合理性 这最终归结为这样一个事实 在 DataTemplate 中 似乎没有办法为生成的每个控件强制在 DependencyProperty 上绑

随机推荐

  • 为什么 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应显示在