【问题标题】:Page navigation using HubTiles, PRISM, and MVVM on Windows Phone在 Windows Phone 上使用 HubTiles、PRISM 和 MVVM 进行页面导航
【发布时间】:2014-03-07 03:21:16
【问题描述】:

我正在尝试使用 WPToolkit、PRISM 和 MVVM 设计中的 HubTile 控件。我的问题是导航页面。

主页面模型

private string _navigationUri;
        public string NavigationUri
        {
            get { return _navigationUri; }
            set
            {
                if (_navigationUri != value)
                {
                    NotifyPropertyChanging();
                    _navigationUri = value;
                    NotifyPropertyChanged();
                }
            }
        }

MainPageViewModel

        private void Navigate(string s)
    {
        (Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri(s, UriKind.RelativeOrAbsolute));
    }

        private DelegateCommand<string> _hubTileTap;
    public DelegateCommand<string> HubTileTap
    {
        get { return _hubTileTap; }
    }

_hubTileTap = new DelegateCommand<string>(Navigate);

XAML

<DataTemplate>
                        <toolkit:HubTile 
                            Margin="10"
                            Size="Default"
                            Title="{Binding Title}">
                            <i:Interaction.Triggers>
                                <i:EventTrigger EventName="Tap">
                                    <i:InvokeCommandAction 
                                        Command="{Binding DataContext.HubTileTap}"
                                        CommandParameter="{Binding NavigationUri}"></i:InvokeCommandAction>
                                </i:EventTrigger>
                            </i:Interaction.Triggers>
                        </toolkit:HubTile>
                    </DataTemplate>

设置断点,我可以看到我的方法实际上从未触发。另外,老实说,我不能 100% 确定我是否设置了正确的方法,将字符串从 HubTile 对象传递给 DelegateCommand,然后再传递给 Method。

我对 MVVM、PRISM 非常陌生,并且仍然是编程的菜鸟。感谢您的帮助!

【问题讨论】:

    标签: c# wpf mvvm windows-phone prism


    【解决方案1】:

    数据模板的作用是什么?你有瓷砖的集合吗?模板的上下文通常是项目。因此,Title 所在的位置就是命令将触发的位置。

    编辑:你添加的,DataContext.HubTileTap 不起作用,在模板里面,DataContext 是项目。

    在 prism 中执行此操作的一种可能方法是对项目类进行操作。然后,当您创建项目时,将每个项目的操作设置为您的点击方法。

    public class EmptyClass
        {
            public ObservableCollection<HubTileItem> HubTiles { get; set; }
    
            public EmptyClass()
            {
                HubTiles = new ObservableCollection<HubTileItem>();
                HubTiles.Add(new HubTileItem { Title = "Tile1", HubTileTap = () => HubTileTap() };);
            }
    
            public void HubTileTap()
            {
            }
        }
    
        public class HubTileItem
        {
            public string Title { get; set; }
    
            public Action HubTileTap { get; set; }
        }
    

    【讨论】:

    • 数据模板位于列表框内。是的,我有一组瓷砖。当我运行应用程序时,其中 3 个确实出现了。轻按它们没有任何作用。
    • 列表框的项目来源是什么?
    • 它绑定到我的 HubTile 可观察集合。
    • 该集合中的项目是绑定正在寻找 HubTileTap 的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多