![](/img/trans.png)
[英]Correct approach to make a ListBox Page Navigation using MVVM on Windows Phone
[英]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.