首页 > 解决方案 > 如何将用户控件放在wpf prism中的itemsControl中

问题描述

我想使用棱镜将用户控件插入 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;
        }

在 viewA 中插入一个菜单项。

菜单项.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

如何进行数据绑定?请帮我

感谢您

标签: prism

解决方案


这不会像这样工作。您必须在“外部”(即在)上创建区域ItemsControl并删除ItemsSource绑定。然后多次导航到项目控制区域以填充它。

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

或者,保留绑定ItemsSource并移除ContentControl内部并将DataTemplates 放在某个地方以供您查看。然后通过将视图模型放入项目源来填充它。

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

就个人而言,我大多数时候更喜欢第二种变体,因为您避免了将您的人员信息打包在导航参数中并将它们取回所增加的复杂性,更不用说更简单的PersonViewModel......


推荐阅读