gpt4 book ai didi

c# - 如何以编程方式将 WPF Datagrid 绑定(bind)到自定义对象的 ObservableCollection?

转载 作者:行者123 更新时间:2023-12-02 14:23:17 25 4
gpt4 key购买 nike

我找了很久也没找到解决办法。标题基本上涵盖了我想要完成的任务。这是我到目前为止所拥有的,显然不适用于删除不相关的内容。

在MainWindow.xaml.cs中:

public MainWindow()
{
InitializeComponent();

ModGrid = new DataGrid();
ModGrid.CanUserReorderColumns = false;

DataGridTextColumn Name = new DataGridTextColumn();
Name.Header = "Name";
Name.MinWidth = 45;
Name.Width = (DataGridLength)(new DataGridLengthConverter()).ConvertFromString("*");
Binding nameBinding = new Binding("Name");
nameBinding.Mode = BindingMode.OneWay;
Name.Binding = nameBinding;
ModGrid.Columns.Add(Name);

DataGridTextColumn Tags = new DataGridTextColumn();
Tags.Header = "Tags";
Tags.MinWidth = 40;
Tags.Width = 200;
Binding tagsBinding = new Binding("Tags");
tagsBinding.Mode = BindingMode.OneWay;
Tags.Binding = tagsBinding;
ModGrid.Columns.Add(Tags);

// There are more columns but you get the idea

ModGrid.ItemsSource = Database.Mods;
}

private void RibbonWindow_Loaded(object sender, RoutedEventArgs e)
{
ModGrid.DataContext = Database.Mods;
}

后来我将项目添加到 Database.Mods

void Fetcher_RequestComplete(bool error, string result, int requestsLeft)
{
if (!error)
{
Database.Mods = Parser.ParseMods(result);
}
}

这就是database.cs中的全部内容

public static class Database
{
public static ObservableCollection<Mod> Mods = new ObservableCollection<Mod>();
}

这就是 mod.cs 中的全部内容

public class Mod
{
public Mod() { }

public Image Status;
public string Name;
public string Description;
public string Author;
public string Tags;
public int Views;
public string Link;
public string[] Versions;
public string[] TagsList;
}

对代码垃圾邮件感到抱歉,但我还没有看到如何完全以编程方式执行此操作,但我有必要这样做。任何回复都非常感谢!

编辑:

虽然我确实找到了答案,但如果您遇到这种情况,我发现最好只创建一个自定义控件并以这种方式从 XAML 进行访问。

最佳答案

编辑:你的问题有点错误,因为你没有绑定(bind)某些东西到你的网格上,你只是设置项目源

尽管如此,有两种方法可以实现您想要的目标。

void Fetcher_RequestComplete(bool error, string result, int requestsLeft)
{
if (!error)
{
Database.Mods.AddRange(Parser.ParseMods(result));//you can use foreach or write AddRange extension
}
}

void Fetcher_RequestComplete(bool error, string result, int requestsLeft)
{
if (!error)
{
ModGrid.ItemsSource = Parser.ParseMods(result));
}
}

更干净的方法是 MVVM,但这不是你的问题:)

关于c# - 如何以编程方式将 WPF Datagrid 绑定(bind)到自定义对象的 ObservableCollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9089128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com