是否可以对DataGrid使用2个不同的集合?
收集天数 - 数据网格行, 集合标题 - 数据网格标题。
视图模型:
public class MonthViewModel : ViewModel
{
public ObservableCollection<DayViewModel> Days { get; set; }
public ObservableCollection<string> Headers { get; set; }
public MonthViewModel()
{
Days = new ObservableCollection<DayViewModel>
{
new DayViewModel { Value1 = 1, Value2 = 2 },
new DayViewModel { Value1 = 3, Value2 = 4 },
};
Headers = new ObservableCollection<string>
{
"Header1",
"Header2"
};
}
}
public class DayViewModel : ViewModel
{
private int _value1;
public int Value1
{
get
{
return _value1;
}
set
{
_value1 = value;
OnPropertyChanged();
}
}
private int _value2;
public int Value2
{
get
{
return _value2;
}
set
{
_value2 = value;
OnPropertyChanged();
}
}
}
查看:
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Days}">
<DataGrid.Columns>
<DataGridTextColumn Header="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.Headers[0]}" Binding="{Binding Value1}"/>
<DataGridTextColumn Header="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.Headers[1]}" Binding="{Binding Value2}"/>
</DataGrid.Columns>
</DataGrid>
错误 - 找不到引用'RelativeSource FindAncestor,AncestorType ='System.Windows.Controls.DataGrid',AncestorLevel ='1'的绑定源。 BindingExpression:路径= DataContext.Headers [0];的DataItem = NULL; target元素是'DataGridTextColumn'(HashCode = 7245576); target属性是'Header'(类型'Object')
有什么问题?
答案 0 :(得分:1)
问题是你的RelativeSource
绑定最终会在DataGrid的数据上下文中查找名为“Headers”的属性(由ItemsSource设置,因此是DayViewModel的集合,显然不是{{{ 1}}属性。
最小的变化是查看Window的DataContext而不是DataGrid。
Headers
鉴于XAML的声明性质,以及您的标题可能不应该在运行时更改的事实,我会重新考虑绑定“Header”文本,但上述解决方案应该可以解决您的问题。