2016-03-29 18 views
0

C# 'de, bir açılan seçim kutusu için bir tupl listesi döndüren bir özellik ekledim. Liste Kaynak dosyalarından dizeleri içerir. Dil değişikliğinde, listedeki değer güncelleniyor. Ancak özelliği çağırırken, döndürülen değer yenilenmez. Aşağıda Dildeki özel bir Liste değişkenini yenilemek MVVM ve XAML

Bu benim tuple değerini dil güncelleştirme üzerinde

SelectedLanguage = LanguageList.FirstOrDefault(q => q.Item1 == CurrentSettings.SelectedLanguage) ?? LanguageList[0]; 

(LCID ve dil adı taşıyan bir keyvalue çifti) çağırmak nasıl kod

private List<Tuple<string, string>> _languageList = new List<Tuple<string, string>> 
    { 
     new Tuple<string, string>("", AppResources.Automatic), 
     new Tuple<string, string>("0407", AppResources.LanguageGerman), 
     new Tuple<string, string>("0809", AppResources.LanguageUKEnglish), 
     new Tuple<string, string>("0409", AppResources.LanguageUSEnglish), 
     new Tuple<string, string>("0c0a", AppResources.LanguageSpanish), 
     new Tuple<string, string>("0c0c", AppResources.LanguageFrenchCanadian), 
     new Tuple<string, string>("040c", AppResources.LanguageFrench), 
     new Tuple<string, string>("0413", AppResources.LanguageDutch) 
    }; 

    public List<Tuple<string, string>> LanguageList 
    { 
      get 
      { 
       return _languageList; 
      } 
    } 

olduğunu, kaynak dizeleri alıyor tercüme edilmiş değer. Ancak, LanguageList özelliği, uygulama başladığında ilk başta başlatılan eski bir liste döndürür.

Bu listeyi dil değişikliği ile nasıl değiştirebilirim?

Şimdiden teşekkürler.

+0

Mülkiyet hakkında değişiklik olduğunu bildirme? –

+0

Her şey doğru görünüyor, ancak sorununuz belirsiz. "Ancak, LanguageList, uygulama başladığında ilk başta başlatılan eski bir liste döndürür" diyorsunuz, bu tamamen beklendiği gibi görünüyor. Bu listeyi neden değiştirmeniz gerekiyor? Ve, eğer * bunu değiştirmeniz gerekiyorsa, lütfen [düzenle] ve tam olarak ne tür değişiklikler yapmanız gerektiğini ** belirtin **. Seçili dili (isteğe bağlı bir seçenek olarak listelemeye gerek yok) kaldırmak istediğinizi düşünebilirim, bu durumda bir ObservableCollection kullanmalısınız, ancak bu gerçekten gereksizdir, bu yüzden bunu varsaymayacağım. – Will

+0

Öneriler için teşekkürler. Listeden bir dil seçerken, kaynak dosyaları seçilen dile uygun olacak şekilde değiştirirdim. Tüm uygulamayı tercüme ediyor ama bu liste. Uygulama kaynağı referansları güncellenmiş dil çevirilerini yansıtır.Ancak, LanguageList özelliği çevrilmiş _languageList değerini döndürmüyor. Tersine, varsayılan değeri (İngilizce) döndürüyor. – Sriram

cevap

0

Sen Sonra Diller için ListView.ItemsSource bağlamak bu

class Language { 
    public string Code { get; set; } 
    public string Name { get; set; } 
} 

void LanguageChangeHandler(sender, args) { 

    // never overwrite the property  
    Languages.Clear(); 

    var languages = args.NewLanguages: // or whatever you do 
    foreach (var language in languages) { 
    Languages.Add(language); 
    } 
}; 

public ObservableCollection<Language> Languages { get; } 
    = new ObservableCollection<Language>(); 

gibi bir şey deneyebilirsiniz.

İlk almak ister misiniz? bunu aynı yapın: Değer sadece burada şıngırdayan

SelectedLanguage = Languages 
    .FirstOrDefault(q => q.Item1 == CurrentSettings.SelectedLanguage) ?? LanguageList[0]; 

. Tuples'ten nefret ediyorum ... çok fazla. Bir sınıf çok mu zor?

Umarım bu yardımcı olur. İyi şanslar!

+0

Öneri için teşekkürler Jerry. Zaten kod düzeyinde çok fazla değişiklik yapmadan benim için çalışan bir kısa yol yaptım. Benim düzeltmeyi aşağıda bir cevap olarak ekleyeceğim. – Sriram

0

Bu sorun için kullandığım düzeltme aşağıdaki kod güncelleştirmesidir. Ben

public void refreshLanguageList() { 
    _languageList = new List<Tuple<string, string>> 
    { 
     new Tuple<string, string>("", AppResources.Automatic), 
     new Tuple<string, string>("0407", AppResources.LanguageGerman), 
     new Tuple<string, string>("0809", AppResources.LanguageUKEnglish), 
     new Tuple<string, string>("0409", AppResources.LanguageUSEnglish), 
     new Tuple<string, string>("0c0a", AppResources.LanguageSpanish), 
     new Tuple<string, string>("0c0c", AppResources.LanguageFrenchCanadian), 
     new Tuple<string, string>("040c", AppResources.LanguageFrench), 
     new Tuple<string, string>("0413", AppResources.LanguageDutch) 
    }; 
} 

aşağıdaki gibi bir yeni gelen fonksiyon Ve aynı verilerle tekrar dizilerini aynı listeyi atayarak _languageList Yenileniyor benim LINQ deyimi

refreshLanguageList(); 
SelectedLanguage = Languages 
    .FirstOrDefault(q => q.Item1 == CurrentSettings.SelectedLanguage) ?? LanguageList[0]; 

önce işlevi denir, liste ile günceller çevrilmiş metin. Bu nedenle, LanguageList özelliği doğru değeri oluşturur.

Açıkçası kirli bir çözümdür. Ama bu benim gereksinimimle iyi çalıştı.