WPF-将用户控件添加到列表框
我正在尝试将用户控件添加到列表框中 My usercontrol包含一组基本元素,如textbox和dropdowns,以某种方式创建一行元素 我的主窗口中ListBox的代码如下所示:WPF-将用户控件添加到列表框,wpf,user-controls,Wpf,User Controls,我正在尝试将用户控件添加到列表框中 My usercontrol包含一组基本元素,如textbox和dropdowns,以某种方式创建一行元素 我的主窗口中ListBox的代码如下所示: <GroupBox FontWeight="SemiBold" Foreground="#FF0CAEF9" Name="gbAddProducts" Style="{x:Null}" Header="ADD PRODUCTS" HorizontalAlignment="Left" Margin="0,2
<GroupBox FontWeight="SemiBold" Foreground="#FF0CAEF9" Name="gbAddProducts" Style="{x:Null}" Header="ADD PRODUCTS" HorizontalAlignment="Left" Margin="0,256,0,0" VerticalAlignment="Top" Width="990" Height="207">
<ListBox Name="lstboxAddProduct" ItemsSource="{Binding Path=AddNewProductRowViewModelList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" BorderThickness="0" Margin="0,10,-2,23">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<ContentControl Content="{Binding AddNewProductRowViewModel}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<Validation.ErrorTemplate>
<ControlTemplate>
<StackPanel>
<AdornedElementPlaceholder x:Name="aepForError"/>
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ErrorContent}" Foreground="White" Background="#DC000C" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</ControlTemplate>
</Validation.ErrorTemplate>
</ListBox>
</GroupBox>
这里AddNewProductRowViewModelList是我的用户控件列表,包含5个控件。
我看到的问题是,当我运行代码时,屏幕有5行,也就是说,当该部分突出显示时,我可以单击该区域以确定它们是5行。但它们是看不见的
这可能是某种“摆在前面”的问题
请告知
提前谢谢。我会这样做:
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<ContentControl>
<local:AddNewProductRowView Datacontext="{Binding AddNewProductRowViewModel}"/>
</ContentControl>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
我会这样做:
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<ContentControl>
<local:AddNewProductRowView Datacontext="{Binding AddNewProductRowViewModel}"/>
</ContentControl>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
ContentControl绑定到的AddNewProductRowViewModel是什么?您应该将其绑定到AddNewProductRowViewModelList中的每个项。AddNewProductRowViewModel是用户控件的模型。我将ListBox绑定到UserControls列表-AddNewProductRowViewModelList。我认为从代码中已经很清楚了。也许你应该在绑定上放置一个带断点的转换器,以查看ContentControl正在接收什么。我不知道你的列表如何知道用户控件代表一行的另一个视图。你能解释一下你是如何理解这种联系的吗。“内容”属性接受一个视图(网格堆栈面板或其他控件),如果您按照属性的建议使用MVVM,则可以指定一个不是视图的视图模型。@Rafal-我将尝试解释。存在一个用户控件-AddNewProductRowView。在用户控件中,我提供了DataContext作为AddNewProductRowViewModel(这当然是一个模型)。当我独立打开它时,它的工作情况与预期的一样好。现在,在我的主窗口中,我添加了一个列表(上面的代码)。MainWidow将其DataContext设置为一个模型,该模型依次包含AddNewProductRowViewModel-ObservableCollection AddNewProductRowViewModelList的列表。在此模型中,我在mainWindow视图模型的构造函数中添加了五个用户控件。您将ContentControl绑定到的AddNewProductRowViewModel是什么?您应该将其绑定到AddNewProductRowViewModelList中的每个项。AddNewProductRowViewModel是用户控件的模型。我将ListBox绑定到UserControls列表-AddNewProductRowViewModelList。我认为从代码中已经很清楚了。也许你应该在绑定上放置一个带断点的转换器,以查看ContentControl正在接收什么。我不知道你的列表如何知道用户控件代表一行的另一个视图。你能解释一下你是如何理解这种联系的吗。“内容”属性接受一个视图(网格堆栈面板或其他控件),如果您按照属性的建议使用MVVM,则可以指定一个不是视图的视图模型。@Rafal-我将尝试解释。存在一个用户控件-AddNewProductRowView。在用户控件中,我提供了DataContext作为AddNewProductRowViewModel(这当然是一个模型)。当我独立打开它时,它的工作情况与预期的一样好。现在,在我的主窗口中,我添加了一个列表(上面的代码)。MainWidow将其DataContext设置为一个模型,该模型依次包含AddNewProductRowViewModel-ObservableCollection AddNewProductRowViewModelList的列表。在这个模型中,我在主窗口视图模型的构造函数中添加了五个用户控件。酷!!你一针见血……这就是我一直缺少的。非常感谢。太酷了!!你一针见血……这就是我一直缺少的。非常感谢。