2015-05-19 14 views
9

Basit bir cevap olmalı, ancak göremiyorum. MVVM Light v5 bir NavigationService ve DialogService'ı tanıttı. Onlarla oynamak için örnek bir uygulama yapmak istedim. danışma yapmam gereken tüm gibi ViewModelLocator bunları kayıt olduğunu gibi görünüyor:mvvm ışığı - NavigationService/DialogService sınıfları bulunamadı

SimpleIoc.Default.Register<IDialogService, DialogService>();

IDialogService otomatik çözüme kavuşturulacağını Galasoft.MvvmLight.Views ad, ihtiyacı var, ancak DialogService sınıf bulunamıyor ve VS içe aktarılacak bir ad alanı öneremez. Ben IDialogService ve INavigationService varsayılan uygulama yoktur bu durumda, sen WPF kullanarak varsayarak yaşıyorum NavigationService

cevap

5

benzer

. Böylece kendi uygulamalarınızı yaratmanız gerekecek.

+2

, ben düşünce yapardım umut bulmak için biraz zaman aldı WPF'nin varsayılan uygulamaya sahip ilk kişi olacağını. Bunların her ikisi için de temel bir hizmet için bir kod örneğine sahip olan herhangi bir yer biliyor musunuz (böylece, uygulamaya koyması gereken işlevselliği görebiliyorum) – SeeMoreGain

+0

Kendi yorumumu yanıtladı. [Bu makale] (http://www.c-sharpcorner.com/UploadFile/3789b7/modern-ui-for-wpf-application-by-example-navigationservice/) çalışmamı sağladı. – SeeMoreGain

6

İşte bazı örnek uygulamalarına dayanan kod ... teşekkürler Laurent u rock! Bu ... Bu yardımcı olur :)

beni şaşırtıyor DialogService Uygulama

/// <summary> 
/// Example from Laurent Bugnions Flowers.Forms mvvm Examples 
/// </summary> 
public class DialogService : IDialogService 
{ 
    private Page _dialogPage; 

    public void Initialize(Page dialogPage) 
    { 
     _dialogPage = dialogPage; 
    } 

    public async Task ShowError(string message, 
     string title, 
     string buttonText, 
     Action afterHideCallback) 
    { 
     await _dialogPage.DisplayAlert(
      title, 
      message, 
      buttonText); 

     if (afterHideCallback != null) 
     { 
      afterHideCallback(); 
     } 
    } 

    public async Task ShowError(
     Exception error, 
     string title, 
     string buttonText, 
     Action afterHideCallback) 
    { 
     await _dialogPage.DisplayAlert(
      title, 
      error.Message, 
      buttonText); 

     if (afterHideCallback != null) 
     { 
      afterHideCallback(); 
     } 
    } 

    public async Task ShowMessage(
     string message, 
     string title) 
    { 
     await _dialogPage.DisplayAlert(
      title, 
      message, 
      "OK"); 
    } 

    public async Task ShowMessage(
     string message, 
     string title, 
     string buttonText, 
     Action afterHideCallback) 
    { 
     await _dialogPage.DisplayAlert(
      title, 
      message, 
      buttonText); 

     if (afterHideCallback != null) 
     { 
      afterHideCallback(); 
     } 
    } 

    public async Task<bool> ShowMessage(
     string message, 
     string title, 
     string buttonConfirmText, 
     string buttonCancelText, 
     Action<bool> afterHideCallback) 
    { 
     var result = await _dialogPage.DisplayAlert(
      title, 
      message, 
      buttonConfirmText, 
      buttonCancelText); 

     if (afterHideCallback != null) 
     { 
      afterHideCallback(result); 
     } 

     return result; 
    } 

    public async Task ShowMessageBox(
     string message, 
     string title) 
    { 
     await _dialogPage.DisplayAlert(
      title, 
      message, 
      "OK"); 
    } 
} 

navigationservice Uygulama

/// <summary> 
/// Example from Laurent Bugnions Flowers.Forms mvvm Examples 
/// </summary> 
public class NavigationService : INavigationService 
{ 
    private readonly Dictionary<string, Type> _pagesByKey = new Dictionary<string, Type>(); 
    private NavigationPage _navigation; 

    public string CurrentPageKey 
    { 
     get 
     { 
      lock (_pagesByKey) 
      { 
       if (_navigation.CurrentPage == null) 
       { 
        return null; 
       } 

       var pageType = _navigation.CurrentPage.GetType(); 

       return _pagesByKey.ContainsValue(pageType) 
        ? _pagesByKey.First(p => p.Value == pageType).Key 
        : null; 
      } 
     } 
    } 

    public void GoBack() 
    { 
     _navigation.PopAsync(); 
    } 

    public void NavigateTo(string pageKey) 
    { 
     NavigateTo(pageKey, null); 
    } 

    public void NavigateTo(string pageKey, object parameter) 
    { 
     lock (_pagesByKey) 
     { 
      if (_pagesByKey.ContainsKey(pageKey)) 
      { 
       var type = _pagesByKey[pageKey]; 
       ConstructorInfo constructor = null; 
       object[] parameters = null; 

       if (parameter == null) 
       { 
        constructor = type.GetTypeInfo() 
         .DeclaredConstructors 
         .FirstOrDefault(c => !c.GetParameters().Any()); 

        parameters = new object[] 
        { 
        }; 
       } 
       else 
       { 
        constructor = type.GetTypeInfo() 
         .DeclaredConstructors 
         .FirstOrDefault(
          c => 
          { 
           var p = c.GetParameters(); 
           return p.Count() == 1 
             && p[0].ParameterType == parameter.GetType(); 
          }); 

        parameters = new[] 
        { 
         parameter 
        }; 
       } 

       if (constructor == null) 
       { 
        throw new InvalidOperationException(
         "No suitable constructor found for page " + pageKey); 
       } 

       var page = constructor.Invoke(parameters) as Page; 
       _navigation.PushAsync(page); 
      } 
      else 
      { 
       throw new ArgumentException(
        string.Format(
         "No such page: {0}. Did you forget to call NavigationService.Configure?", 
         pageKey), 
        "pageKey"); 
      } 
     } 
    } 

    public void Configure(string pageKey, Type pageType) 
    { 
     lock (_pagesByKey) 
     { 
      if (_pagesByKey.ContainsKey(pageKey)) 
      { 
       _pagesByKey[pageKey] = pageType; 
      } 
      else 
      { 
       _pagesByKey.Add(pageKey, pageType); 
      } 
     } 
    } 

    public void Initialize(NavigationPage navigation) 
    { 
     _navigation = navigation; 
    } 
}