簡體   English   中英

在Windows Phone上使用HubTiles,PRISM和MVVM進行頁面導航

[英]Page navigation using HubTiles, PRISM, and MVVM on Windows Phone

我正在嘗試使用WPToolkit,PRISM和MVVM設計中的HubTile控件。 我的問題是瀏覽頁面。

MainPageModel

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的新手,並且對編程還是不熟悉的。 謝謝你的幫助!

數據模板包含在什么內容中? 你有瓷磚的收藏嗎? 模板的上下文通常是項目。 因此,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; }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM