【发布时间】:2016-09-06 12:28:32
【问题描述】:
我想组合下面的集合并使用 CompositeCollection 将其绑定到 DataGrid。
private ObservableCollection<LabelDataInfo> labelSource;
public ObservableCollection<LabelDataInfo> LabelSource
{
get { return labelSource; }
set { labelSource = value; }
}
private ObservableCollection<NumericalDataInfo> numericLabelSource;
public ObservableCollection<NumericalDataInfo> NumericLabelSource
{
get { return numericLabelSource; }
set { numericLabelSource = value; }
}
private CompositeCollection mergedSource;
public CompositeCollection MergedSource
{
get { return mergedSource; }
set { mergedSource = value; OnPropertyChanged("MergedSource"); }
}
public MergedTargetDataInfo()
{
var labelInfo = new ObservableCollection<LabelDataInfo>();
labelInfo.Add(new LabelDataInfo() { Title = "Title1", Label = "Label1" });
labelInfo.Add(new LabelDataInfo() { Title = "Title2", Label = "Label2" });
labelInfo.Add(new LabelDataInfo() { Title = "Title3", Label = "Label3" });
LabelSource = labelInfo;
var numericInfo = new ObservableCollection<NumericalDataInfo>();
numericInfo.Add(new NumericalDataInfo() { NumericTitle = "NumericTitle1", NumericLabel = "NLabel1" });
numericInfo.Add(new NumericalDataInfo() { NumericTitle = "NumericTitle2", NumericLabel = "NLabel2" });
numericInfo.Add(new NumericalDataInfo() { NumericTitle = "NumericTitle3", NumericLabel = "NLabel3" });
NumericLabelSource = numericInfo;
mergedSource = new CompositeCollection();
CollectionContainer collection1 = new CollectionContainer() { Collection = LabelSource };
CollectionContainer collection2 = new CollectionContainer() { Collection = NumericLabelSource };
mergedSource.Add(collection1);
mergedSource.Add(collection2);
}
<DataGrid ItemsSource="{Binding MergedSource}" AutoGenerateColumns="True"/>
但它显示为空网格。如何在 wpf 中合并 Label 和 NumericLabelDataSource? 如何在 DataGrid 控件中显示组合集合。尝试绑定 CompositeCollection 时 DataGrid 为空。
【问题讨论】:
-
另一个例子:stackoverflow.com/q/19243109/109702 尝试以声明方式而不是在代码中定义 CompositeCollection 及其 CollectionContainer 项。
-
如果我对您的要求的猜测没有错,那么使用
CompositeCollection而不是DataGrid,您将无法获得预期的结果。 :)