データグリッドにバインドされた監視可能なコレクションがあります。ラベル、テキストボックスなどの wpf コントロールを datagrid セルに動的に作成して、監視可能なコレクションを更新することができます。
ここで、この項目のコレクションをデータグリッドのように行と列でキャンバスに表示したいと思います。それを手に入れるのを手伝ってください。以下のコードを使用しています。
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 つの列です。