如何在wpf棱镜的itemsControl中放置usercontrol



我想使用prism在wpf中插入用户控件到itemscontrol。用户控件打印出来了,但是我不知道怎么做数据绑定。

ViewA.xaml

<Grid>
<ItemsControl ItemsSource="{Binding People}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl Grid.Row="1" Margin="10"
prism:RegionManager.RegionName="PersonDetailsRegion"
prism:RegionManager.RegionContext="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>

ViewAViewModel.cs

private ObservableCollection<Person> _people;
public ObservableCollection<Person> People
{
get { return _people; }
set { SetProperty(ref _people, value); }
}
public ViewAViewModel()
{
CreatePeople();
}

private void CreatePeople()
{
var people = new ObservableCollection<Person>();
for (int i = 0; i < 10; i++)
{
people.Add(new Person()
{
FirstName = String.Format("First {0}", i),
LastName = String.Format("Last {0}", i),
Age = i
});
}
People = people;
}

在视图中插入菜单项。

MenuItem.xaml

<Grid x:Name="LayoutRoot" Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- First Name -->
<TextBlock Text="First Name:" Margin="5" />
<TextBlock Grid.Column="1" Margin="5" Text="{Binding FirstName}" />
<!-- Last Name -->
<TextBlock Grid.Row="1" Text="Last Name:" Margin="5" />
<TextBlock Grid.Row="1" Grid.Column="1"  Margin="5" Text="{Binding LastName}" />
<!-- Age -->
<TextBlock Grid.Row="2" Text="Age:" Margin="5"/>
<TextBlock Grid.Row="2" Grid.Column="1"  Margin="5" Text="{Binding Age}"/>
</Grid>
现状如下。[1]
https://i.stack.imgur.com/1VBai.png

如何做数据绑定?请帮帮我

谢谢你

这样不行。您必须在"外部"上创建区域,即在ItemsControl上并删除ItemsSource绑定。然后多次导航到项目控制区域以填充它。

<ItemsControl prism:RegionManager.RegionName="PersonDetailsRegion"/>

或者,保留ItemsSource的绑定并删除其中的ContentControl,并将DataTemplates放在视图的某个位置。然后通过将视图模型放入条目源来填充它。

<DataTemplate DataType={x:Type Person}"><PersonView /></DataTemplate>
...    
<ItemsControl ItemsSource="{Binding People}"/>

就我个人而言,大多数情况下我更喜欢第二种变体,因为这样可以避免将人员信息打包到导航参数中并将其返回所增加的复杂性,更不用说更简单的PersonViewModel

最新更新