C# 有没有一种方法可以将一个用户控件替换为基于索引的另一个用户控件

C# 有没有一种方法可以将一个用户控件替换为基于索引的另一个用户控件,c#,wpf,user-controls,C#,Wpf,User Controls,我已经创建了两个用户控件,并计划将其绑定到列表视图中。在主窗口中,我有一个按钮,在该按钮上单击我正在重复添加第一个用户控件。为此,我创建了一个可观察的用户控件集合,并将其添加到列表视图中。目前,该部分工作正常(在每个按钮上单击“第一个用户控件”可将其正确添加到列表视图)。现在我的要求是, 列表视图可以多次使用usercontrol1,具体取决于按钮单击 此用户控件有一个按钮,可打开usercontrol2 现在,当我单击usercontrol1中的按钮时,需要将UserControlOne替换为

我已经创建了两个用户控件,并计划将其绑定到列表视图中。在主窗口中,我有一个按钮,在该按钮上单击我正在重复添加第一个用户控件。为此,我创建了一个可观察的用户控件集合,并将其添加到列表视图中。目前,该部分工作正常(在每个按钮上单击“第一个用户控件”可将其正确添加到列表视图)。现在我的要求是,

  • 列表视图可以多次使用usercontrol1,具体取决于按钮单击
  • 此用户控件有一个按钮,可打开usercontrol2
  • 现在,当我单击usercontrol1中的按钮时,需要将UserControlOne替换为usercontrol2。这不是简单的替换,因为列表视图多次包含usercontrol1,如果我单击第n个usercontrol1,则usercontrol1只需要使用usercontrol2进行回复
  • 由于描述有点混乱,我添加了一个图像,它显示了我如何多次将usercontrol1绑定到列表视图的想法和代码部分

    public ObservableCollection<UserControl> lis = new ObservableCollection<UserControl>();
    
    private void NextScreen_Click(object sender, RoutedEventArgs e)
        {
            UserCntrl1 usr = new UserCntrl1();
            ListView.ItemsSource = lis;
            lis.Add(usr);
        }
    
    公共ObservableCollection lis=新ObservableCollection();
    私有void NextScreen\u单击(对象发送者,路由目标e)
    {
    UserCntrl1 usr=newusercntrl1();
    ListView.ItemsSource=lis;
    lis.Add(usr);
    }
    
    将UserControl集合添加到ItemsSource属性首先是错误的

    您应该在ListBoxItem的ControlTemplate中声明UserControls。通过数据项类中属性上的DataTriggers在不同模板之间切换,如下面示例中的
    IsSelected
    。单击按钮时,更改相应项的属性

    <ListBox ItemsSource="{Binding Items}">
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <local:UserControl1 .../>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsSelected}" Value="True">
                        <Setter Property="ContentTemplate">
                            <Setter.Value>
                                <DataTemplate>
                                    <local:UserControl2 .../>
                                </DataTemplate>
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>
    

    我建议使用带有折叠的
    TabItem
    TabControl
    和通过
    按钮的导航触发器。然后,您可以轻松地将页面控件放置在每个
    选项卡项中

    
    
    当用户单击按钮时,将选择所需的选项卡索引

    private void Page1\u按钮\u单击(对象发送者,路由目标)
    {
    MainTabControl.SelectedIndex=1;
    }
    
    请参考Image但是,通过这种方式,我可以向listview添加多个用户控件吗?当然,将为Items集合的每个元素创建一个UserControl实例,并且单个项将自动传递到UserControl的DataContext。看一看。