全体像を見ずに質問に答えるのは難しいですが、あなたはこれを間違った方向に進んでいるように感じます。ユーザーコントロールのインスタンスをコードから直接追加しているようです。ItemsControl
それを行う代わりに、XAMLで何らかのものを作成し、その中でItemTemplate
ユーザーが制御できるようにする必要があります。それをビューモデルのコレクションにバインドしItemsControl
、そのコレクションのみを操作します。
ビューモデルまたはコードビハインドのビジュアルコントロールを参照しないでください。コードから直接視覚要素を参照していることに気付いたときはいつでも、「ねえ!それよりも良い方法があります!」という警告フラグを頭に浮かび上がらせる必要があります...
例:
ビューモデル:
public class ViewModel
{
public ObservableCollection<MyDataObject> MyDataObjects { get; set; }
public ViewModel()
{
MyDataObjects = new ObservableCollection<MyDataObject>
{
new MyDataObject { Name="Name1", Value="Value1" },
new MyDataObject { Name="Name2", Value="Value2" }
};
}
}
public class MyDataObject
{
public string Name { get; set; }
public string Value { get; set; }
}
リストボックスとデータテンプレートを含むウィンドウXAMLフラグメント:
<Window.Resources>
...
<DataTemplate x:Key="MyDataTemplate">
<local:MyUserControl/>
</DataTemplate>
</Window.Resources>
...
<ListBox ItemsSource="{Binding MyDataObjects}"
ItemTemplate="{StaticResource MyDataTemplate}"
HorizontalContentAlignment="Stretch"/>
ユーザーコントロール:
<UniformGrid Rows="1">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Value}" HorizontalAlignment="Right"/>
</UniformGrid>