我正在尝试使用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非常陌生,而且在编程时仍然是一个菜鸟。谢谢你的帮助!
答案 0 :(得分:0)
数据模板是什么?你有一堆瓷砖吗?模板的上下文通常是项目。所以,Title生活的地方就是命令将要发射的地方。
编辑:你添加的内容,DataContext.HubTileTap在模板中不起作用,DataContext就是项目。
使用棱镜执行此操作的一种可能方法是对项类进行操作。然后,在创建项目时,将每个项目的操作设置为点击方法。
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; }
}