2017-02-13 3 views
0

Ich habe mehrere Wörterbücher. Jeder von ihnen enthält die gleichen Schlüssel, nur mit unterschiedlichen Werten. Ich benutze sie für Übersetzungen. Sie werden dynamisch erstellt ..C# wpf mehrere Wörterbücher zu Datagrid

Also, es sieht ungefähr so ​​aus:

DictionaryEng: first_page_name = "Erste Seite" second_page_name = "Zweite Seite"

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

Ich möchte, dass diese Informationen im DataGrid angezeigt werden, damit der Benutzer die Werte ändern kann. Es sollte so aussehen: this, Endwerte können bearbeitet werden.

Was ist die beste Vorgehensweise, dies zu tun?

+0

tun Sie MVVM wissen? Ist es in Ordnung für Sie, wenn ich Ihnen ein Beispiel zeige, vorausgesetzt Sie haben eine ViewModelBase? –

+0

Problem ist, dass die Objekte in Dictionary dynamisch mit JSON Deserializer erstellt werden ... so habe ich keine Ahnung, was Key oder Value Werte sein werden ... oder, gibt es eine Möglichkeit mit MVVM, dies zu erreichen? – user3239349

+0

Ok, ich werde die Erstellung des Wörterbuchs mit einer Stub-Funktion, die in der vm c.tor –

Antwort

1

Grundsätzlich müssen Sie das Datagrid an eine Sammlung binden

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

Ich werde die Erstellung des Wörterbuchs mit Stub-Funktionen in der c.tor Ansichtsmodell genannt Mock-up

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"); 
     } 
    } 
} 

, wo die darunterliegende Klasse ist wie folgt definiert

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; 
     } 
    } 
} 

Beachten Sie, dass die Übersetzungen haben nur ein Getter, um die Zeichenfolge aus dem Wörterbuch abzurufen. Sie können sie leicht bearbeiten, indem Sie einen Setter hinzufügen, um die neue Übersetzung in eine Persistenzschicht zu speichern. Darüber hinaus sind englische und russische Wörterbücher generisch genug, um in Wörterbücher umbenannt zu werden. Sobald der Benutzer eine Sprache in einer anderen Combobox auswählt, können Sie das Wörterbuch entsprechend zurücksetzen. Da ich einen Stummel hier haben, ist die Setter nicht viel Sinn machen, aber nur Sie und Idee zu geben ...

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

aufgerufen wird, wie wird der Benutzer die Werte ändern, wenn es nur Getter gibt? Und, eine andere Sache, ich weiß auch nicht, welche Sprachen Benutzer wählen ... so kann er Englisch, Russisch, Serbisch wählen ... – user3239349

+0

Wie ich geschrieben habe, fügen Sie einfach den Setter, wo Sie speichern möchten neue Werte. Und es ist einfach, eine weitere Combobox mit der vom Benutzer ausgewählten Sprachbindung hinzuzufügen. An dieser Stelle ist Ihre Frage vage und unvollständig –