Я не уверен, что я полностью понимаю вашу проблему, но если у вас есть класс, который вы хотите представить в своем представлении из вашей ViewModel, вы можете использовать ItemsControl
для отображения различных классов, используя DataTemplate
.
Скажем, у вас есть класс User
public class User
{
public string Id { get; set;}
public string Name { get; set;}
}
public class UserViewModel
{
private ObservableCollectionaUser<User> _users = new......
public ObservableCollection<User> Users
{
get
{
return _users;
}
}
}
В UserView вы можете иметь
<ItemsControl ItemsSource="{Binding Users}">
<ItemsControl.Resources>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Id}" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
Таким образом, пользователь будет представлен в представлении с использованием шаблонаобъявлено выше.Тогда вам не придется использовать UIElement
s в вашей ViewModel.
ItemsControl
может относиться к элементам сетки и иметь элементы, представленные в сетке с SharedGridScope (если я правильно помню).