[英]Is there a way to replace one user control with another user control based on index
我创建了两个用户控件,我打算将它绑定到列表视图中。 在主窗口中,我有一个按钮,在按钮上单击,我重复添加第一个用户控件。 为此,我创建了一个可观察的用户控件集合并将其添加到列表视图中。 目前该部分运行良好(在每个按钮上单击第一个用户控件正确添加到列表视图)。 现在我的要求,
由于描述有点混乱,我在这里输入图像描述正在添加一个图像,该图像显示了我如何多次将 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);
}
将 UserControl 的集合添加到 ItemsSource 属性首先是错误的。
您应该改为在 ListBoxItem 的 ControlTemplate 中声明 UserControl。 通过数据项类中的属性上的 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>
我推荐的是使用带有 Collapsed TabItem
的TabControl
和通过Button
的导航触发器。 然后,您可以轻松地将页面控件放置在每个TabItem
。
<Grid>
<TabControl x:Name="MainTabControl">
<TabItem Header="Page1" Visibility="Collapsed">
<StackPanel>
<Label Content="Page 1"/>
<Button Content="Next" Click="Page1_Button_Click"/>
</StackPanel>
</TabItem>
<TabItem Header="Page2" Visibility="Collapsed">
<Label Content="Page 2"/>
</TabItem>
</TabControl>
</Grid>
当用户单击按钮时,会选择所需的选项卡索引。
private void Page1_Button_Click(object sender, RoutedEventArgs e)
{
MainTabControl.SelectedIndex = 1;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.