2017-02-13 4 views
0

У меня есть несколько словарей. Каждый из них содержит одни и те же ключи, только с разными значениями. Я использую их для перевода. Они создаются динамически ..C# wpf несколько словарей для datagrid

Таким образом, это выглядит примерно так:

DictionaryEng: first_page_name = "Первая страница" second_page_name = "Вторая страница"

DictionaryRu: first_page_name = «Первая страница « second_page_name =« Вторая страница »

Я хотел бы, чтобы эта информация отображалась в DataGrid или, поэтому пользователь может изменить значения. Он должен выглядеть как this, конечные значения подлежат редактированию.

Какова наилучшая практика для этого?

+0

вы знаете о MVVM? Это нормально для вас, если я покажу вам пример, предполагающий, что у вас есть ViewModelBase? –

+0

Проблема в том, что объекты в словаре динамически создаются с десериализатором JSON ... поэтому у меня нет идеи, какие значения Key или Value будут ... или, существует ли способ с MVVM для достижения этого? – user3239349

+0

Хорошо, я буду макетировать создание словаря с помощью функции заглушки, вызванной в vm c.tor –

ответ

1

В основном вам нужно связать DataGrid к коллекции

<DataGrid 
     ItemsSource="{Binding Lines}" AutoGenerateColumns="True" 

Я макет создания словаря с функциями окурка называется в ViewModel c.tor

public class MyVM : ViewModelBase 
{ 
    public MyVM() 
    { 
     Line.DictionaryEng = Line.DictionaryEngStub(); 
     Line.DictionaryRu = Line.DictionaryRuStub(); 
     lines = new ObservableCollection<Line>(Line.DictionaryEng.Keys.Select(k => new Line() { KeyWord = k })); 
    } 
    private ObservableCollection<Line> lines; 
    public ObservableCollection<Line> Lines 
    { 
     get { return lines; } 
     set 
     { 
      lines = value; 
      OnPropertyChanged("Lines"); 
     } 
    } 
} 

где базовый класс определяется следующим образом:

public class Line : ViewModelBase 
{ 
    internal static Dictionary<string, string> DictionaryEngStub() 
    { 
     return new Dictionary<string, string>() 
     { 
      { "first_page_name ","First page" }, 
      { "second_page_name ","Second page" } 
     }; 
    } 
    internal static Dictionary<string, string> DictionaryRuStub() 
    { 
     return new Dictionary<string, string>() 
     { 
      {"first_page_name ","Первая страница" }, 
      {"second_page_name ","Вторая страница" } 
     }; 
    } 
    internal static Dictionary<string, string> DictionaryEng = new Dictionary<string, string>(); 
    internal static Dictionary<string, string> DictionaryRu = new Dictionary<string, string>(); 
    private string keyWord; 
    public string KeyWord 
    { 
     get { return keyWord; } 
     set 
     { 
      keyWord = value; 
      OnPropertyChanged("keyWord"); 
     } 
    } 
    public string EnglishWord { 
     get 
     { 
      string english; 
      if (DictionaryEng.TryGetValue(keyWord ?? "", out english)) 
      { 
       return english; 
      } 
      return null; 
     } 
    } 
    public string RussianhWord 
    { 
     get 
     { 
      string russian; 
      if (DictionaryRu.TryGetValue(keyWord ?? "", out russian)) 
      { 
       return russian; 
      } 
      return null; 
     } 
    } 
} 

Обратите внимание, что переводы имеют только получатель для извлечения строки из словаря. Вы можете легко сделать их редактируемыми, добавив сеттер, чтобы сохранить новый перевод в слой сохранения. Кроме того, английские и русские словари достаточно универсальны для переименования в словари. Когда пользователь выбирает язык в другом поле со списком, вы можете соответствующим образом изменить словарь. Так как у меня окурок здесь, сеттер не имеет особого смысла, но только, чтобы дать вам и идея ...

private string englishSaved; 
    public string EnglishWord { 
     get 
     { 
      if (englishSaved != null) 
      { 
       return englishSaved; 
      } 
      string english; 
      if (DictionaryEng.TryGetValue(keyWord ?? "", out english)) 
      { 
       return english; 
      } 
      return null; 
     } 
     set 
     { 
      englishSaved = value; //save the new translation into a persistence layer 
     } 
    } 
+0

Как пользователь изменит значения, если есть только геттеры? И, еще одна вещь, я также не знаю, какие языки пользователь выберет ... поэтому он может выбрать английский, русский, сербский ... – user3239349

+0

Как я уже писал, вы просто добавляете сеттер туда, где хотите сохранить новые значения. И легко добавить еще один combobox с выбранным пользователем языком. На данный момент ваш вопрос расплывчатый и неполный –

Смежные вопросы