我一直在尋找年齡,還沒有找到任何解決方案。標題基本上涵蓋了我想要完成的事情。這是迄今爲止我所看到的,顯然不適用於無關緊要的東西。如何以編程方式將WPF Datagrid綁定到自定義對象的ObservableCollection?
在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這樣的訪問。
我要問 - 爲什麼它必須在後面的代碼?這會產生「令人討厭」的代碼,確實很難維護。是什麼阻止你使用視圖模型和XAML中設置的數據綁定並使用數據模板來正確設置它?我的意思是使用這種方法 - 你不妨回到winforms .... – tsells 2012-02-01 01:51:20
我使用功能區選項卡,我有一個內容控件,所以當你切換標籤內容的變化。我創建了這些東西來放入代碼中的內容控件,並手動將其分配給contentcontrol。這可能不是做這件事的最好方式,但我幾乎沒有足夠的經驗來用XAML做任何其他方式。 – Koraken 2012-02-01 02:34:58