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