簡體   English   中英

我需要使用帶有Caliburn.Micro的WPF在DataGrid上顯示對象字典的數據,每個對象都有自己的字典

[英]I need to display data from a dictionary of objects each with their own dictionary on a DataGrid using WPF with Caliburn.Micro

因此,我有一個Dictionary<string, Language> ,它是語言的集合,每種語言都包含以語言名稱為鍵的BindableCollection<Translation> Translation只是一個包含鍵和值的數據模型。 它基本上是一本字典,但是我需要將鍵和值綁定到文本框。 所有語言都具有相同的鍵列表。 我希望能夠將ItemsSource綁定到我的Dictionary<string, Language>並使其輸出類似以下內容。

Key       | English    | Spanish          | ...
______________________________________________
username  | Username   |Nombre de usuario | ...

我發現能夠執行此操作的唯一方法是將所有數據放入DataTable,但是我需要能夠編輯,添加和刪除列和行。 試圖連接自定義事件處理以使我的數據和DataGrid保持同步,我的代碼變得一團糟,我需要找出一個更好,更易管理的解決方案。 感謝您抽出寶貴的時間來幫助您。

這看起來好像不需要幾行代碼就可以處理。 無論如何,我會:

  1. 使用Dictionary<string, Language>創建模型
  2. 使用List<TranslationsRow>創建一個ViewModel

TranslationsRow看起來像這樣:

class TranslationsRow
{
  public string Key;
  public string English;
  public string Spanish;
  public string German:
  // and so on...
}
  1. 數據將您的DataGrid綁定到List<TranslationsRow>

您必須自己編寫模型( Dictionary<string, Language> )和ViewModel( List<TranslationsRow> )之間的映射關系。 (在SQL中,這將是PIVOT / UNPIVOT操作)。

我認為這是ViewModel代表View“轉換” Model數據的完美示例。

如果我理解正確,那么您將擁有一本字典,該字典想在使用Caliburn Micro的ShellViewModel時綁定到TextBox。

為了進行綁定,我必須要做的就是將它們全部設置在ShellView后面的代碼中。 所以我在Window name = tb1上有一個文本框。 在構造函數中,我編寫了代碼:

InitializeComponent(); 
tb1.DataContext = ViewModels.ShellViewModel.myDictionary;

然后在tb1 XAML中設置綁定:

Text={Binding [myKey].myProperty, Mode=TwoWay}

我必須為每個人這樣做。 為每個文本框命名\\在其后的代碼\\綁定它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM