[英]How do I programmatically bind a WPF Datagrid to a ObservableCollection of custom objects?
我一直在寻找年龄,还没有找到任何解决方案。 标题基本上涵盖了我要完成的工作。 到目前为止,这是我显然无法处理不相关内容的内容。
在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进行访问会更好。
编辑:您的问题有点错误,因为您没有将某些内容绑定到网格中,只需设置 itemssource
但是,有两种方法可以实现您想要的。
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,但这不是您的问题:)
您的Mod类需要实现INotifyPropertyChanged来适当地更新屏幕。
尝试
protected void NotifyPropertyChanged(String info)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.