c# wpf xaml mvvm datagrid

c# - WPF MVVM Bind Dictionary<String, List<String>> a la cuadrícula de datos



xaml datagrid (1)

Personalmente, crearía un modelo de objetos para representar sus datos y vincularlos a una colección de esos objetos.

public class MyObject { public string Company { get; set; } public string Operator { get; set; } public string Interest { get; set; } public string Type { get; set; } }

y

public MainViewModel() { var partners = new ObservableCollection<MyObject>() { new MyObject("company1", "false", "40%", "type1"), new MyObject("company2", "true", "60%", "type2") }; ... }

No creo que lo que estás pidiendo sea posible con un DataGrid normal porque lee cosas como "para cada fila en la colección, crea un DataRow y asigna el DataContext a esa fila". En su caso, cada fila representa toda la grilla de datos, por lo que esto no funciona para usted.

Tengo problemas para vincular mi Dictionary<string, List<string>> a mi cuadrícula de datos WPF con el diseño correcto.

Este es mi objeto de datos:

public class Result { public Result(string type, string name, Dictionary<string, List<string>> partners) { Type = type; Name = name; Partners = partners; } public string Type { get; set; } public string Name { get; set; } public Dictionary<string, List<string>> Partners { get; set; } }

Que he rellenado con datos ficticios y expuesto como propiedad pública de mi viewmodel:

public class MainViewModel { public MainViewModel() { var partners = new Dictionary<string, List<string>> { {"Company", new List<string> {"company1", "company2"}}, {"Operator", new List<string> {"false", "true"}}, {"Interest", new List<string> {"40%", "60%"}}, {"Type", new List<string> {"type1", "type2"}} }; Asset = new Result("TestType", "TestName", partners); } public Result Asset { get; set; } }

Estoy intentando vincular el diccionario de Partners a mi cuadrícula de datos. La Key de cada entrada del diccionario (por ejemplo, empresa / operador / interés / tipo) debe constituir los encabezados de mi cuadrícula de datos, con los valores respectivos llenando las columnas. Me gusta esto:

Company | Operator | Interest | Type company1 false 40% type1 company2 true 60% type2

¿Cómo puedo conseguir esto? He estado viendo esta pregunta pero la información es al revés de cómo la quiero. Quiero mis claves como los encabezados de las columnas de la cuadrícula de datos (no me importa codificar de forma rígida los encabezados, ya que creo que la propiedad del encabezado no puede usar el enlace de datos). Este es mi XAML hasta ahora, itemsource está vinculado correctamente, pero no sé cómo obtener los datos en el formato que necesito:

<DataGrid x:Name="dg" ItemsSource="{Binding Asset.Partners}" AutoGenerateColumns="false"> <DataGrid.Columns> <DataGridTextColumn Header="Company" Binding="{Binding ?}"/> <DataGridTextColumn Header="Operator" Binding="{Binding ?}"/> <DataGridTextColumn Header="Interest" Binding="{Binding ?}"/> <DataGridTextColumn Header="Type" Binding="{Binding ?}"/> </DataGrid.Columns> </DataGrid>

Si uso Binding="{Binding Value[0]} para la primera columna, entonces obtengo una" fila "de valores en mi columna, pero quiero que sea al revés. También he intentado usar Binding="{Binding Asset.Partners[Company]}" pero eso no funcionó.

Cualquier ayuda apreciada.