C# 如何将listviewitem中的按钮绑定到Winrt中ViewModel中的命令
我在ViewModel中有一个NavigateToAccountsCommandRelayCommand属性。当我将其绑定到页面上ListView之外的任何位置的按钮时,命令绑定正在工作。但是,一旦我将其移动到ListView的DataTemplate,它就不起作用了 我已尝试将绑定从NavigateToAccountsCommand更改为DataContext。NavigateToAccountsCommand仍不工作 谢谢你的帮助C# 如何将listviewitem中的按钮绑定到Winrt中ViewModel中的命令,c#,mvvm,winrt-xaml,C#,Mvvm,Winrt Xaml,我在ViewModel中有一个NavigateToAccountsCommandRelayCommand属性。当我将其绑定到页面上ListView之外的任何位置的按钮时,命令绑定正在工作。但是,一旦我将其移动到ListView的DataTemplate,它就不起作用了 我已尝试将绑定从NavigateToAccountsCommand更改为DataContext。NavigateToAccountsCommand仍不工作 谢谢你的帮助 <Page x:Class="FinancePRO.A
<Page
x:Class="FinancePRO.App.Views.AccountsView"
DataContext="{Binding AccountsViewModel, Source={StaticResource MainViewModelLocator}}"
mc:Ignorable="d">
<Grid>
<!--**This one is working**-->
<Button Command="{Binding NavigateToAccountsCommand}" >
<!--**This one is not working**-->
<ListView ItemsSource="{Binding AllAccounts}" >
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Stretch">
<TextBlock Text="{Binding AccountName}"/>
<Button Command="{Binding NavigateToAccountsCommand}">
</Button>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
当您在
列表视图的数据模板
中时,您的数据上下文是列表视图的项资源
的当前项。由于在allaccounts
”每个元素中都没有名为“NavigateToAccountsCommand
”的属性,因此绑定不起作用
要解决这个问题,您需要从DataTemplate
外部引用一些内容;下面的方法应该有效。它将绑定更改为引用根网格的DataContext
,该网格应具有可访问的属性NavigateToAccountsCommand
。要引用网格,必须添加Name属性,然后使用ElementName
binding
<Grid Name="Root">
<!--**This one is working**-->
<Button Command="{Binding NavigateToAccountsCommand}" >
<!--**This one is not working**-->
<ListView ItemsSource="{Binding AllAccounts}" >
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Stretch">
<TextBlock Text="{Binding AccountName}"/>
<Button Command"{Binding ElementName=Root, Path=DataContext.NavigateToAccountsCommand}">
</Button>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
您可以使用
<Button x:Name="cmdTabItemCloseButton"
Style="{StaticResource TabItemCloseButtonStyle}"
Grid.Column="1" Margin="15,0,0,0"
Command="{Binding RelativeSource=
{RelativeSource FindAncestor,
AncestorType={x:Type ListView}},
Path=DataContext.NavigateToAccountsCommand}"
CommandParameter="{Binding}"/>
我遇到了一个类似的问题(Win RT),我只使用以下方法解决了这个问题:
<GridView
x:Name="itemGridView"
ItemClick="ItemView_ItemClick"
IsItemClickEnabled="True"/>
感谢loopedcode的及时响应。这就解决了我的问题。谢谢你的及时回复。这在普通WPF应用程序中有效,但在WInRT应用程序中不起作用。谢谢你。
private void ItemView_ItemClick(object sender, ItemClickEventArgs e)
{
//e is the object being clicked
}