首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ICommand不会触发

ICommand不会触发
EN

Stack Overflow用户
提问于 2012-07-06 15:12:06
回答 1查看 168关注 0票数 0

我的ICommand不会触发,除非我将DataContext字段移动到按钮的DataTemplate (contlisttemplate)中。我在样式资源中设置了图像,一旦我将DataContext字段移动到DataTemplate中,这些图像就会消失。图像和ICommand都应该使用相同的DataContext,所以我不知道为什么它不能工作。

下面是我的代码片段。

代码语言:javascript
复制
DataContext="{Binding LongListViewModel, Source={StaticResource viewModelLocator}}"

代码语言:javascript
复制
<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>

代码语言:javascript
复制
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");
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-10 16:25:56

万一有人想知道答案是什么。根据Aaron Hill ATG的说法:

这似乎是一个范围问题。外部DataContext是您的LongListViewModel类,它包含所需的ICommand,但是容器的ItemsSource设置为视图模型公开的LongListItems集合。这意味着,用于DataContext的有效DataTemplate是集合的单个成员,而不是整体视图模型。

重写DataContext的DataTemplate将允许您指向视图模型并访问ICommand,但是这也意味着您丢失了LongListItems集合各个元素中的任何数据。这可能就是为什么图像在这种情况下不再起作用的原因。

由于集合中的每个项都有自己的按钮,所以在单个项上公开ICommand属性可能是有意义的,而不是视图模型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11364927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档