ListView上的按钮-使用MVVM
我在listview控件上有一个按钮。我已将此控件绑定到ViewModel类基类上的一个命令。如果我在listview之外放置一个按钮,那么使用相同的命令也可以正常工作。但是当我将命令放在listview上时,它不会被触发 你能想出一个理由吗 以下是片段:ListView上的按钮-使用MVVM,listview,mvvm,button,controls,Listview,Mvvm,Button,Controls,我在listview控件上有一个按钮。我已将此控件绑定到ViewModel类基类上的一个命令。如果我在listview之外放置一个按钮,那么使用相同的命令也可以正常工作。但是当我将命令放在listview上时,它不会被触发 你能想出一个理由吗 以下是片段: <ListView Grid.Row="2" AlternationCount="2" ItemsSource="{Binding Path=AObject}" Margin="20" MaxHeight="200">
<ListView Grid.Row="2" AlternationCount="2" ItemsSource="{Binding Path=AObject}" Margin="20" MaxHeight="200">
<ListView.DataContext>
<local:MyViewModel/>
</ListView.DataContext>
<ListView.View>
<GridView>
<GridViewColumn Header="Run ID" DisplayMemberBinding="{Binding Path=RID}" />
<GridViewColumn Header="Job ID" DisplayMemberBinding="{Binding Path=JID}" />
<GridViewColumn Header="Run Description">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding Path=OpenScCommand}" HorizontalAlignment="Right"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Edit">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding ShowItemCommand}" CommandParameter="{Binding Path=RID}" Content="_Edit email run" IsDefault="False"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
当您将按钮放在listview中时,它将获得一个新的DataContext—它将获得列表中当前项的DataContext,因此它将丢失原始DataContext
最好的解决方案是使用,这是因为按钮位于
列表视图项
中,因此它继承了包含它的项的数据上下文。以下是如何绑定到列表视图本身的DataContext:
<Button Command="{Binding ShowItemCommand}" DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}}" ...
您也可以用更少的代码来实现这一点
<Button Command="{Binding ShowItemCommand}">
<Button.DataContext>
<local:MyViewModel/>
</Button.DataContext>
</Button>
在项目的视图模型上?!这些项表示数据,而不是逻辑。把命令放在那里是错误的,谢谢你们。我想是的。我本可以实现ViewModellocator方法,但这个方法的速度更快。