我建立一個使用MVVM的應用程序,我試圖命令綁定到所看到本教程的按鈕:無法將命令綁定到一個HyperlinkButton(的Windows Phone 8.1)
然而,我無法使綁定工作 - 當我單擊HyperlinkButton並且我在Execute方法的開頭放置的斷點不會觸發時,沒有任何反應。
這裏是我的ViewModel:
public class ArticleListViewModel
{
public IEnumerable<ArticleItem> Items { get; set; }
public async Task PopulateArticles()
{
// ...
}
}
public class ArticleItem
{
public ArticleItem()
{
OpenLinkCommand = new OpenArticleLinkCommand();
}
public ICommand OpenLinkCommand;
public string Url { get; set; }
public string Title { get; set; }
}
OpenArticleLinkCommand.cs:
public class OpenArticleLinkCommand : ICommand
{
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public async void Execute(object parameter)
{
var article = parameter as ArticleItem;
if (article != null)
{
var success = await Launcher.LaunchUriAsync(new Uri(article.Url));
//TODO: handle success/fail
}
}
}
這裏是我查看樣子:
<UserControl
x:Class="LTNewsFeed.Views.ArticleItemView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:LTNewsFeed.Views"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">
<ListBox ItemsSource="{Binding}" x:Name="mainListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<HyperlinkButton x:Name="Title"
Content="{Binding Path=Title, Mode=OneWay}"
Command="{Binding OpenLinkCommand}"
Grid.Column="0"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</UserControl>
主要Page.xaml:
<Page
x:Class="LTNewsFeed.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:LTNewsFeed"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="using:LTNewsFeed.Views"
xmlns:src="using:LTNewsFeed"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<views:ArticleItemView x:Name="ItemsOnPage" />
</Grid>
</Page>
我填充視圖模型項集合在MainPage.xaml.cs:
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
await viewModel.PopulateArticles();
ItemsOnPage.DataContext = viewModel.Items;
}
事情我已經沒有成功的嘗試:
- 引用了作爲建議
DataContext
並指定ElementName
, this answer。 - 將HyperlinkButton更改爲簡單按鈕。
- 將
OpenArticleLinkCommand
移動到與我的ArticleItem
模型相同的文件中,以防命名空間無法識別。 - 在Google和StackOverflow上瀏覽類似的問題 - 在我看來,我所做的一切都與示例中的相同。
任何幫助指向我在正確的方向,或描述如何我可以調試這種東西將不勝感激。
您是否看到列表框中的項目? –
我懷疑你的演員在執行功能失敗 –