Wpf 如何将TabControl标题中的关闭按钮绑定到窗口中的命令';什么是视图模型?

Wpf 如何将TabControl标题中的关闭按钮绑定到窗口中的命令';什么是视图模型?,wpf,Wpf,我正在使用一个工具,希望在TabControl中的选项卡上添加一个关闭按钮。我不知道如何使按钮的Command属性绑定到窗口的ViewModel上的相应属性 虚拟机很简单。只有INPC实现和一个名为CloseSelectedFileCommand的ICommand属性 TabControl的XAML省略了其他部分,没有任何漂亮之处,因为漂亮是在“它工作”之后使用的: X ... 我知道发生了什么。从按钮的角度来看,当前项目是“我的收藏”中的项目之一。他们没有DataContext,如果他们有

我正在使用一个工具,希望在TabControl中的选项卡上添加一个关闭按钮。我不知道如何使按钮的Command属性绑定到窗口的ViewModel上的相应属性

虚拟机很简单。只有INPC实现和一个名为CloseSelectedFileCommand的ICommand属性

TabControl的XAML省略了其他部分,没有任何漂亮之处,因为漂亮是在“它工作”之后使用的:


X
...
我知道发生了什么。从按钮的角度来看,当前项目是“我的收藏”中的项目之一。他们没有DataContext,如果他们有,肯定不会是我的窗口的ViewModel。我不知道该怎么做。我想也许一个寻找窗口祖先的相对资源会有所帮助,但事实并非如此


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

也许这对您来说是可行的,一直以来……
绑定按钮的数据上下文(或您可能需要的任何其他位置)

如果你在“上面”的某个地方有一个窗口,这就可以了

或者,如果您有特定的
名称
,则可以使用
元素名称
,类似于
相对资源


希望这有帮助

也许这对你有用,一直以来……
绑定按钮的数据上下文(或您可能需要的任何其他位置)

如果你在“上面”的某个地方有一个窗口,这就可以了

或者,如果您有特定的
名称
,则可以使用
元素名称
,类似于
相对资源


希望这有帮助

您的windows DataContext是您的ViewModel吗?或者哪个元素具有您的ViewModel,因为您可以使用ElementName绑定,例如,
Command=“{binding Path=CloseSelectedFileCommand,ElementName=myWindowOrControlName}”
Yes,窗口的数据上下文就是ViewModel。到目前为止,NSGaga给出的答案似乎是有效的,我正在运行它。您的windows DataContext是您的ViewModel吗?或者哪个元素具有您的ViewModel,因为您可以使用ElementName绑定,例如,
Command=“{binding Path=CloseSelectedFileCommand,ElementName=myWindowOrControlName}”
Yes,窗口的数据上下文就是ViewModel。到目前为止,看起来NSGaga给出的答案是有效的,我也在尝试。我发誓我也尝试过类似的方法,但我想我错了。你的回答让我尝试了:Command=“{Binding Path=DataContext.CloseSelectedFileCommand,RelativeSource={RelativeSource AncestorType=Window}}”是的,尝试一些东西直到你符合你的要求,很高兴它能帮上忙我发誓我尝试了类似的东西,但我猜我错了。你的回答让我尝试了:Command=“{Binding Path=DataContext.CloseSelectedFileCommand,RelativeSource={RelativeSource AncestorType=Window}}”是的,尝试几件事直到你符合你的要求,很高兴它能帮上忙
<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="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext}"