Как привязать кнопку в listviewitem к команде в ViewModel в Winrt
У меня есть NavigateToAccountsCommand свойство RelayCommand в ViewModel. Когда я привязываю то же самое к кнопке на странице в любом месте за пределами ListView, привязка команды работает. Однако, как только я перемещаю это в DataTemplate ListView, он не работает.
Я попытался изменить привязку с NavigateToAccountsCommand to DataContext.NavigateToAccountsCommand все еще не работает.
ценю вашу помощь...
<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>
3 ответов
когда вы находитесь внутри DataTemplate
на ListView
, ваш контекст данных является текущим элементом ItemsSource
. Как там ничего не называется"NavigateToAccountsCommand
" свойство в ваш AllAcounts
' каждый отдельный элемент, привязка не работает.
чтобы исправить это, вам нужно будет ссылаться на что-то извне DataTemplate
; следующее должно работать. Он изменяет привязку для ссылки на корневую сетку DataContext
который должен иметь свойство NavigateToAccountsCommand
работает. Для ссылки на сетка, вы должны добавить атрибут Name, а затем использовать ElementName
привязка.
<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"/>
а затем в классе страницы:
private void ItemView_ItemClick(object sender, ItemClickEventArgs e)
{
//e is the object being clicked
}