如何将 TabControl 标头中的关闭按钮绑定到窗口 ViewModel 中的命令?

2023-12-09

我正在开发一个工具,想要向 TabControl 中的选项卡添加一个关闭按钮。我不知道如何将按钮的 Command 属性绑定到窗口 ViewModel 上的相应属性。

VM 很简单。只需 INPC 实现和名为 CloseSelectedFileCommand 的 ICommand 属性。

TabControl 的 XAML 省略了其他部分,没有什么漂亮的,因为漂亮是在“它有效”之后:

<TabControl ItemsSource="{Binding Results}" 
            SelectedItem="{Binding SelectedFile}">
    <TabControl.ItemTemplate>
        <!-- Type is ResultInfo -->
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding FileName}" />
                <Button Grid.Column="1" Command="{Binding Path=CloseSelectedFileCommand}">X</Button>
            </Grid>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
          ...
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

我明白发生了什么事。从按钮的角度来看,当前项目是我的收藏中的项目之一。他们没有 DataContext,如果他们有,那肯定不会是我的 Window 的 ViewModel。我不知道如何进行这项工作。我认为寻找 Window 祖先的relativesource 可能会有所帮助,但事实并非如此。

我查看了一些谷歌搜索。他们似乎建议我的数据项本身应该是一个 ViewModel 并且有这个命令。这有点奇怪,因为项目集合属于窗口。类似的 StackOverflow 帖子似乎建议将绑定项创建为 ViewModel 本身,并给它们一个命令来引发由窗口处理的事件。我不明白“单击按钮时引发事件”之上的额外间接层对我有什么作用。我想这是唯一的方法吧?我想不出一种方法将窗口的 DataContext 传递到此 XAML。


也许这对你有用,沿着这些思路......
绑定按钮数据上下文(或您可能需要的任何其他地方)...

DataContext="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext}"  

这提供了您在其“上方”某处有一个窗口。

或者如果你有具体的Name您可以使用ElementName类似于RelativeSource.

希望这可以帮助

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

如何将 TabControl 标头中的关闭按钮绑定到窗口 ViewModel 中的命令? 的相关文章

  • WPF 触摸应用程序(部分)在 .NET Framework 4.7 上冻结

    Update 微软承认了这个问题 https connect microsoft com VisualStudio Feedback Details 3139882 Gepost 门 Microsoft op 13 10 2017 om 1
  • 从 TransformedBitmap 对象中“跨越”困境

    我有一个 2208 x 3000 TransformedBitmap 对象 其格式为 Indexed8 我正在对其进行 CopyPixels 操作 我在用着 int formattedBitmap PixelWidth formattedB
  • 方法执行时按钮禁用(PreviewLeftMouseDown/Up 必须可行)

    我需要一个如下的序列 按钮默认状态 按钮按下 按钮按下的方法 执行 并且按钮本身被禁用一段时间 由于 禁用 时间已过 按钮已启用 按钮向上 执行 按钮向上的方法 按钮默认状态 我已经尝试过这段代码 它的第一部分工作正常 但第二部分 Up 不
  • 将 winform 树视图转换为 wpf 树视图

    我已经构建了一个在 winforms 中生成树视图的函数 它包括具有递归的子文件夹和文件 现在我想将其转换为 wpf 我不知道如何处理课程 我知道我必须制作自己的自定义类 treenode 它有一个属性 parent 类似于 winform
  • 指定 Xaml 中开始标记和结束标记之间的属性

    考虑以下 Xaml
  • 上传大型 xml 到 WCF REST 服务 -> 400 错误请求

    我一直在尝试寻找这个错误 但到目前为止还没有运气 所以我的客户端上有一个带有此 web config 的服务
  • 破译哪个控件触发了事件

    我有一个包含许多图像的应用程序 这些图像看起来都相同并执行类似的任务
  • WPF 找不到某些字体

    为什么会这样Media Fonts找不到 Arial Rounded MT Bold foreach var f in System Windows Media Fonts SystemFontFamilies if f Source Ar
  • WPF DataGrid 双向绑定

    我有财产UserSet其中包含来自ObservableCollection
  • WPF 数据绑定到字符串属性

    我有一个关于数据绑定的问题 我正在努力解决这个问题 我的 xaml cs 文件中有以下属性 private string stationIdInstruction public event PropertyChangedEventHandl
  • DataGrid 是 WPF 中的必需品吗?

    我看到很多讨论正在进行 人们询问 WPF 的 DataGrid 并抱怨 Microsoft 迄今为止还没有在其 WPF 框架中提供 DataGrid 我们知道 WPF 是一项出色的 UI 技术 并且具有 ItemsControl DataT
  • 给 MVVM 中的 View 一些命令

    假设我有一些用户控制权 用户控件有一些子窗口 用户控制用户想要关闭某种类型的子窗口 用户控制代码后面有一个方法 public void CloseChildWindows ChildWindowType type 但我无法调用此方法 因为我
  • ListView选择单个项目,wpf

    我有一个列表视图 它的项目源是一个列表 我希望用户只选择一项 当我将列表视图的 SelectionMode 设置为 single 时 用户仍然可以选择多个项目 并且列表视图似乎变得疯狂并选择用户未选择的项目 看起来很奇怪 任何人都知道可能是
  • 打印 WPF 位图图像

    打印位图图像的最佳方法是什么 我有 System Drawing 背景 所以我正在考虑将其转换为位图 然后打印它 但我认为可能有更好的方法 Thanks 根据 Drew 的回答 最好测量并安排传递给 PrintVisual 方法的容器 这将
  • Prism 应用程序关闭时不退出

    我正在学习棱镜 我遇到了一个问题 我制作了一款应用程序 与 Mike Taulty 制作的关于 Prism 的精彩教程中的应用程序非常相似 最大的区别是我的应用程序是 WPF 应用程序而不是 Silverlight 我发现我遇到了问题 当我
  • 绑定到后面代码中的相对源

    在我的 UserControl 中 我的 XAML 中有以下代码
  • WPF 我应该如何评估属性路径?

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

    我正在 WPF C 中设计 GUI 并且使用Tab Control目的 我的tab control将包含很多选项卡 我想知道如何禁用对象的默认 包装 行为 基本上相反this https stackoverflow com question
  • 当 View 被渲染/实例化时通知 ViewModel

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

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

随机推荐