在没有看到大局的情况下很难回答您的问题,但是我有一种感觉,您正在以错误的方式解决这个问题。您似乎是直接从代码中添加用户控件的实例。而不是这样做,您应该在您的 XAML 中创建某种类型ItemsControl
,并在其中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>