是否有一种方法可以根据索引将一个用户控件替换为另一个用户控件

问题描述 投票:0回答:1

我创建了两个用户控件,并计划将其绑定到列表视图中。在主窗口中,我有一个按钮,然后单击按钮,我正在重复添加第一个用户控件。为此,我创建了一个可观察的用户控件集合,并将其添加到列表视图中。当前,该部分运行良好(在每个按钮上单击的第一个用户控件都已正确添加到列表视图中)。现在我有这个要求,

  1. 列表视图可以多次具有usercontrol1取决于按钮的单击。
  2. 此用户控件具有一个将打开usercontrol2的按钮。
  3. 现在我有了这个要求,当我单击usercontrol1中的按钮时,需要用usercontrol2替换一个用户控件。这不只是替换,因为列表视图多次包含usercontrol1,所以如果我单击第n个usercontrol1,则仅该usercontrol1需要替换为usercontrol2。

由于描述有点令人困惑,我enter image description here添加了一张图像,该图像显示了如何将用户控件1多次绑定到列表视图的想法和代码部分。

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);
    }
c# wpf user-controls
1个回答
0
投票

首先将UserControls的集合添加到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>
© www.soinside.com 2019 - 2024. All rights reserved.