Как создать динамические столбцы Datagrid? - PullRequest
0 голосов
/ 02 июля 2018
public partial class MainWindow : Window
{
    public ObservableCollection<MainEntry> mainEntries { get; set; }
    public MainWindow()
    {
        mainEntries = new ObservableCollection<MainEntry>();
        for (int i = 1; i < 3; i++)
        {
            MainEntry mainEntry = new MainEntry();
            if (i == 1)
            {
                mainEntry.Variable = "safe";
                mainEntry.LangEntries.Add(new LangEntry { Entry = "speichern", Lang = "de" });
                mainEntry.LangEntries.Add(new LangEntry { Entry = "safe", Lang = "en" });
            }
            else if (i == 2)
            {
                mainEntry.Variable = "close";
                mainEntry.LangEntries.Add(new LangEntry { Entry = "beenden", Lang = "de" });
                mainEntry.LangEntries.Add(new LangEntry { Entry = "close", Lang = "en" });
            }
            mainEntries.Add(mainEntry);
        }
        this.DataContext = this;
        InitializeComponent();

    }

}
public class MainEntry
{
    string _variable = null;
    ObservableCollection<LangEntry> _langEntries = null;

    public MainEntry()
    {
        LangEntries = new ObservableCollection<LangEntry>();
    }

    public string Variable { get => _variable; set => _variable = value; }
    public ObservableCollection<LangEntry> LangEntries { get => _langEntries; set => _langEntries = value; }
}

public class LangEntry
{
    private string _lang = null;
    private string _entry = null;


    public string Lang { get => _lang; set => _lang = value; }
    public string Entry { get => _entry; set => _entry = value; }
}enter code here

что если нужно, чтобы один столбец был предопределен, а остальные должны быть динамическими. Мне нужно привязать этот объект к сетке данных. В конце дня, если должно выглядеть примерно так

Variable | Ланг (де) | Ланг (о) безопасно | сохранить | speichern закрыть | закрыть | бывшее

можно добавить больше языков. это нужно для инструмента перевода

1 Ответ

0 голосов
/ 02 июля 2018

Вы можете сделать что-то вроде этого, просто добавив привязку.

public partial class MainWindow : Window
{

    public ObservableCollection<Person> Items  = new ObservableCollection<Person>();

    public MainWindow()
    {
        InitializeComponent();

        Items.Add(new Person(){FirstName = "James", LastName = "Tays"});

        this.DataGrid.ItemsSource = Items;
    }

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        if (this.DataGrid.Columns.Any())
        {
            var binding = new Binding("LastName");
            this.DataGrid.Columns.Add(new DataGridTextColumn(){Header = "Last Name", Binding = binding});
        }
        else
        {
            var binding = new Binding("FirstName");
            this.DataGrid.Columns.Add(new DataGridTextColumn(){Header = "FirstName", Binding = binding});
        }
    }
}

public class Person
{
    public string FirstName { get; set; }

    public string LastName { get; set; }
}
}
...