我可能错过了一些非常基本的东西 - 我是 Avalonia、MVVM 和 xaml 的新手。
我正在尝试运行此 DataGrid 示例:https://docs.avaloniaui.net/docs/reference/controls/datagrid/
在“窗口”标签中,我有: xmlns:vm="using:AvaloniaControls.ViewModels"
这是创建 DataGrid 的 xaml:
<DataGrid Name="TestGrid" x:DataType="vm:MainWindowViewModel" ItemsSource="{Binding People}" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"/>
<DataGridTextColumn Header="Last Name" Binding="{Binding LastName}" />
</DataGrid.Columns>
</DataGrid>
通过将其包含在 axaml 文件顶部附近,可以在设计时使用测试数据正确填充网格:
<Design.DataContext>
<vm:MainWindowViewModel/>
</Design.DataContext>
但是,网格不会在运行时填充。
这是 MainWindowViewModel 类(来自在线示例):
using System.Collections.ObjectModel;
using System.Collections.Generic;
namespace AvaloniaControls.ViewModels
{
public class MainWindowViewModel : ViewModelBase
{
public ObservableCollection<Person> People { get; }
public MainWindowViewModel()
{
var people = new List<Person>
{
new Person("Neil", "Armstrong"),
new Person("Buzz", "Lightyear"),
new Person("James", "Kirk")
};
People = new ObservableCollection<Person>(people);
}
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
}
}
查看 Design.DataContext 块后,我碰巧尝试在 C# 代码隐藏中执行以下操作:
var test = new AvaloniaMVVM.ViewModels.MainWindowViewModel();
TestGrid.DataContext = test;
它现在可以工作了 - 我认为这确实应该出现在文档示例中。对于那些有 MVVM 经验的人来说可能是显而易见的。