【发布时间】:2012-02-23 17:42:41
【问题描述】:
我一直在寻找年龄,但没有找到任何解决方案。标题基本上涵盖了我想要完成的事情。到目前为止,这就是我所拥有的,显然不能处理不相关的内容。
在 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....
-
我正在使用功能区选项卡,并且我有一个内容控件,因此当您在选项卡之间切换时,内容会发生变化。我创建了要放入代码中的内容控件的内容,并手动将其分配给内容控件。这可能不是最好的方法,但我对 XAML 的经验还不够丰富,无法以任何其他方式做到这一点。
标签: c# .net wpf data-binding datagrid