我在创建POC的过程中花了很长时间试图简化众多博客上的示例。不知怎的,我没有看到我失踪的东西。
我有这个XAML结构,并且已经将文本块的内容绑定到视图模型中的属性 Alpha 。
<Window ... >
<Window.DataContext>
<local:ViewModel></local:ViewModel>
</Window.DataContext>
<Grid>
...
<DataGrid ...>
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Alpha}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
视图模型非常简单,目前只包含一个属性。
class ViewModel
{
public String Alpha { get; set; }
}
当然,我们需要以某种方式将数据提供给视图模型。所以我为假值创建了一个简单的getter。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private static IEnumerable<String> GetFakes()
{
yield return "beep";
yield return "boop";
}
}
我还没有找到任何关于如何提供此数据到视图模型的明确示例(或者如何使视图模型获取数据)。请注意,要显示的数据是静态的,并且不会在第一时间发生变化,所以我不需要任何通知器(或者我会吗?)因为所有信息都已准备好进行初始化。
答案 0 :(得分:0)
你应该有主视图模型,它包含你的子视图模型的列表。
class MainViewModel
{
public ObservableCollection<DataGridRowViewModel> Items
{
get;
set;
}
public MainViewModel(){
Items = new ObservableCollection<DataGridRowViewModel>{
new DataGridRowViewModel("Beep"),
new DataGridRowViewModel("Meep")
};
}
}
class DataGridRowViewModel
{
public string Alpha {get;set;}
public DataGridRowViewModel(string alpha){
Alpha = alpha;
}
}
在您的数据网格中,您应该绑定Items
属性,请参阅ItemsSource
。
<Window ... >
<Window.DataContext>
<local:MainViewModel/>
</Window.DataContext>
<Grid>
...
<DataGrid ... ItemsSource="{Binding Items}">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<-- This DataTemplate applies TO DataGridRowViewModel -->
<TextBlock Text="{Binding Alpha}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>