我有一个绑定到数据网格的可观察集合。我可以动态地将标签、文本框等 wpf 控件创建到数据网格单元中,从而更新可观察的集合。
现在,我想在画布上以行和列的形式显示这些项目集合,就像在数据网格中一样。请帮我搞定。我正在使用如下代码。
ObservableCollection<Data> Items= this.Items as ObservableCollection<Data>;
if (this.Items != null)
{
foreach (var element in this.Items)
{
if (element != null)
{
UIElement getitem = (UIElement)element.InputField;
//where inputfield is a property which holds the control.
// It eturns the control that has created.
canvas.Children.Add(getitem);//adding the control to canvas
}
}
}
但它抛出异常(将控件添加到画布)如下。指定的 Visual 已经是另一个 Visual 的子级或 CompositionTarget 的根。
谢谢您的答复。
其中 Data 是一个定义如下的类。
公共类数据:INotifyPropertyChanged {
private UIElement _uIElement;
public UIElement UIElement
{
get { return _uIElement; }
set
{
if (value != _uIElement)
{
_uIElement = value;
this.OnPropertyChanged("UIElement");
}
}
}
private UIElement _inputField;
public UIElement InputField
{
get { return _inputField; }
set
{
if (value != _inputField)
{
_inputField = value;
this.OnPropertyChanged("InputField");
}
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string name)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
} }
Inputfield 和 UIelement 属性是数据网格的 2 列,其中包含动态创建的控件信息。