Трудно ответить на ваш вопрос, не видя более широкой картины, однако я чувствую, что вы поступаете неправильно по этому поводу. Похоже, что вы добавляете экземпляры своего пользовательского элемента управления непосредственно из кода. Вместо этого вы должны создать какой-то 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>