我的ICommand不会触发,除非我将DataContext字段移动到按钮的DataTemplate (contlisttemplate)中。我在样式资源中设置了图像,一旦我将DataContext字段移动到DataTemplate中,这些图像就会消失。图像和ICommand都应该使用相同的DataContext,所以我不知道为什么它不能工作。
下面是我的代码片段。
DataContext="{Binding LongListViewModel, Source={StaticResource viewModelLocator}}"<i:Interaction.Behaviors>
<GamePad:XboxBehavior StartFocusControlName="continuousList1" IsTopLevelViewForFocus="True"/>
</i:Interaction.Behaviors>
<UserControl.Resources>
<DataTemplate x:Key="contlisttemplate" >
<Button
Command="{Binding Gotodetailpage}"
Style="{StaticResource custherotile}">
</Button>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<xbox:ContinuousList
HorizontalAlignment="Left"
Name="continuousList1"
VerticalAlignment="Top"
ItemTemplate="{StaticResource contlisttemplate}"
ItemsSource="{Binding LongListItems}" Height="316" Width="1280"
Grid.Row="1"
>
<i:Interaction.Behaviors>
<GamePad:XboxBehavior IsContinuousListVuiEnabled="True" HasFocusRetention="True"/>
</i:Interaction.Behaviors>
</xbox:ContinuousList>public class LongListViewModel : ViewModelBase<LongListViewModel>
{
private readonly IDialogService dialogService;
public Navigateto compass = new Navigateto();
public LongListViewModel()
{
LongListItems = new ObservableCollection<object>();
dictionaryListwithkey = new Dictionary<string, object>();
Gotodetailpage = new RelayCommand(PerformGotoDetailPage);
}
public LongListViewModel(IDialogService dialogService)
: this()
{
this.dialogService = dialogService;
}
public Program getherovideo
{
get { return (Program)LongListItems[0]; }
set
{
//SetProperty(ref currentVideo, value,x => x.CurrentVideo);
}
}
public ObservableCollection<object> LongListItems
{
get;
set;
}
public Dictionary<string, object> dictionaryListwithkey
{
get;
set;
}
public ICommand Gotodetailpage { get; private set; }
private void PerformGotoDetailPage()
{
// Console.WriteLine("List item clicked");
compass.goToDetailsPageWithPath("89");
}
}发布于 2012-07-10 16:25:56
万一有人想知道答案是什么。根据Aaron Hill ATG的说法:
这似乎是一个范围问题。外部DataContext是您的LongListViewModel类,它包含所需的ICommand,但是容器的ItemsSource设置为视图模型公开的LongListItems集合。这意味着,用于DataContext的有效DataTemplate是集合的单个成员,而不是整体视图模型。
重写DataContext的DataTemplate将允许您指向视图模型并访问ICommand,但是这也意味着您丢失了LongListItems集合各个元素中的任何数据。这可能就是为什么图像在这种情况下不再起作用的原因。
由于集合中的每个项都有自己的按钮,所以在单个项上公开ICommand属性可能是有意义的,而不是视图模型。
https://stackoverflow.com/questions/11364927
复制相似问题