我有一個視圖模型在我的應用程序動態添加按鈕,應用程序欄在Windows Phone 8的與MVVM
/// <summary>
/// The sample view model
/// </summary>
public class SampleViewModel: ViewModelBase
{
public SampleViewModel(IApplicationBarService applicationBarService)
{
this.applicationBarService = applicationBarService
this.ApplicationBarService.AddButton("Add Bookmark", new Uri("Images/favs-toadd.png", UriKind.Relative), this.OnAddPnrBookmark);
}
/// <summary>
/// Gets or sets the application bar service.
/// </summary>
public IApplicationBarService ApplicationBarService { get; set; } }
IApplicationBarService的實現看起來像這樣
/// <summary>
/// The application service.
/// </summary>
public class ApplicationBarService : IApplicationBarService
{
/// <summary>
/// Gets the application bar.
/// </summary>
public IApplicationBar ApplicationBar
{
get
{
var currentPage = ((PhoneApplicationFrame)Application.Current.RootVisual).Content as MainPage;
if (currentPage != null && currentPage.ApplicationBar == null)
{
currentPage.ApplicationBar = new ApplicationBar();
}
if (currentPage != null)
{
return currentPage.ApplicationBar;
}
return null;
}
}
/// <summary>
/// The add button.
/// </summary>
/// <param name="title">
/// The title.
/// </param>
/// <param name="imageUrl">
/// The image url.
/// </param>
/// <param name="onClick">
/// The on click.
/// </param>
public void AddButton(string title, Uri imageUrl, Action onClick)
{
var newButton = new ApplicationBarIconButton()
{
Text = title,
IconUri = imageUrl,
};
newButton.Click += (sender, e) => onClick.Invoke();
this.ApplicationBar.Buttons.Add(newButton);
}
}
我將應用程序欄注入到視圖模型中,並將示例視圖模型駐留在便攜式庫中,而應用程序欄服務實現對於手機而言是本機的。
當我運行代碼失敗在
VAR當前頁=((PhoneApplicationFrame)Application.Current.RootVisual)。內容作爲所述的MainPage應用;
爲RootVisual是零,因此我通過 this.ApplicationBarService.AddMethod
我的猜測是,這必須做一些事情沒有被加載頁面的相同的代碼工作,如果我intialize應用程序我無法添加按鈕Bar使用綁定到頁面上的按鈕的RelayCommand。
我已經看到一些其他線程(Windows Phone 8 Application Bar Button Long Tap Event) 其中PhoneApplicationPage的ApplicationBar屬性綁定到ViewModel,但我無法實現,因爲我的視圖模型駐留在可移植類庫中。
任何幫助表示讚賞。
你能簡單地等待頁面加載嗎? –
是託尼最終多數民衆贊成我所做的,看到下面的答案並驗證 – Abhilash
似乎我不能發表一個答案,直到明天因此使用評論,我想出了這個解決方案使用Interactivity庫,我添加了一個事件觸發器,並將其綁定到命令在我的視圖模型中,我添加了應用程序欄按鈕,它解決了問題 – Abhilash