WPF用户控件公开内部列表项
我试图编写一个UserControl来显示项目列表,其中每个项目都是一个标题和一组复选框。这个整体将表示一种数据形式,其中填写者回答的问题列表的值为1到4。这一切都可以正常工作,并很好地绑定到窗口的ViewModel 但我目前在UserControl中得到了如下硬编码的答案:WPF用户控件公开内部列表项,wpf,data-binding,user-controls,Wpf,Data Binding,User Controls,我试图编写一个UserControl来显示项目列表,其中每个项目都是一个标题和一组复选框。这个整体将表示一种数据形式,其中填写者回答的问题列表的值为1到4。这一切都可以正常工作,并很好地绑定到窗口的ViewModel 但我目前在UserControl中得到了如下硬编码的答案: <ListBox ItemsPanel="{StaticResource HorizontalScores}" Style="{StaticResource styleOuterListBox}" Ite
<ListBox
ItemsPanel="{StaticResource HorizontalScores}"
Style="{StaticResource styleOuterListBox}"
ItemContainerStyle="{StaticResource styleOuterListBoxItem}">
<ListBoxItem>Never</ListBoxItem>
<ListBoxItem>Sometimes</ListBoxItem>
<ListBoxItem>Often</ListBoxItem>
<ListBoxItem>Always</ListBoxItem>
</ListBox>
<ListView
Name="listviewScores"
ItemsSource="{Binding Path=Scores}"
Margin="5"
BorderThickness="0"
Background="Transparent"
Focusable="False"
Grid.Row="3">
<ListView.View>
<GridView
ColumnHeaderContainerStyle="{StaticResource styleHiddenHeader}">
<GridView.Columns>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Path=Index}"
HorizontalAlignment="Right" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn
DisplayMemberBinding="{Binding Path=Title}" />
<GridViewColumn >
<GridViewColumn.CellTemplate>
<DataTemplate>
<local:Scorer >
</local:Scorer>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
从未
有时
经常
总是
我想从窗口的XAML或ViewModel中设置它们,因为它们对于其他形式不同,但看不到正确的咒语。如何从UserControl中删除ListBoxItems并改用数据绑定
大编辑
好的,这是实际的用户控件(看起来很可怕,但这不是重点):
从未
有时
经常
总是
它的名称如下:
<ListBox
ItemsPanel="{StaticResource HorizontalScores}"
Style="{StaticResource styleOuterListBox}"
ItemContainerStyle="{StaticResource styleOuterListBoxItem}">
<ListBoxItem>Never</ListBoxItem>
<ListBoxItem>Sometimes</ListBoxItem>
<ListBoxItem>Often</ListBoxItem>
<ListBoxItem>Always</ListBoxItem>
</ListBox>
<ListView
Name="listviewScores"
ItemsSource="{Binding Path=Scores}"
Margin="5"
BorderThickness="0"
Background="Transparent"
Focusable="False"
Grid.Row="3">
<ListView.View>
<GridView
ColumnHeaderContainerStyle="{StaticResource styleHiddenHeader}">
<GridView.Columns>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Path=Index}"
HorizontalAlignment="Right" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn
DisplayMemberBinding="{Binding Path=Title}" />
<GridViewColumn >
<GridViewColumn.CellTemplate>
<DataTemplate>
<local:Scorer >
</local:Scorer>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
我想做的是将从不/有时/经常/总是listboxitems从用户控件中硬编码移动到数据绑定
(也欢迎提出“您不想这样做”的建议!)是否要将集合绑定到列表框 这很简单
<ListBox ItemsSource="{Binding Answers}" />
您的集合在ViewModel中的何处公开
如果您在创建公开ItemsSource的自定义控件时遇到问题,那么您只需要从ItemsControl继承,而不仅仅是从UserControl继承
编辑:
一些假设:
- ListBox、自定义控件或更高级别父元素的DataContext设置为 视图模型李>
- ViewModel有一个 属性称为“答案”李>
- Answers属性实现 我数不清
<ListBox ItemsSource="{Binding Answers}" />
您的集合在ViewModel中的何处公开
如果您在创建公开ItemsSource的自定义控件时遇到问题,那么您只需要从ItemsControl继承,而不仅仅是从UserControl继承
编辑:
一些假设:
- ListBox、自定义控件或更高级别父元素的DataContext设置为 视图模型李>
- ViewModel有一个 属性称为“答案”李>
- Answers属性实现 我数不清
- (一年后…)
我想你的问题和我的相似。我提出了一种技术,可以在UserControl上公开内部控件的ItemsSource。我的问题链接如下:
我知道我的解决方案是有效的。我不知道的是,它是否违反了WPF中一些神圣的“最佳实践”。不过感觉不错。(一年后……)
我想你的问题和我的相似。我提出了一种技术,可以在UserControl上公开内部控件的ItemsSource。我的问题链接如下:
我知道我的解决方案是有效的。我不知道的是,它是否违反了WPF中一些神圣的“最佳实践”。不过感觉是对的。这样做,只需确保设置了usercontrol的DataContext。所以在XAML中,YourData包含一个名为Answers的属性,就像SergioL在上面说的那样。@Mark-是的,我只是假设知识…应该是明确的。我真的想绑定到两个集合,一个绑定到显示行的列表框,另一个绑定到显示列的列表框。@amaca-也许你可以重新表述你的问题。列表框没有列标题。如果自定义控件包含标头,则需要公开一个依赖项属性以接受另一个IEnumerable…然后必须在模板中处理该数据。使用此方法,只需确保设置usercontrol的DataContext。所以在XAML中,YourData包含一个名为Answers的属性,就像SergioL在上面说的那样。@Mark-是的,我只是假设知识…应该是明确的。我真的想绑定到两个集合,一个绑定到显示行的列表框,另一个绑定到显示列的列表框。@amaca-也许你可以重新表述你的问题。列表框没有列标题。如果自定义控件包含标题,则需要公开依赖项属性才能接受另一个IEnumerable…然后必须在模板中处理该数据。我一直在努力使用不同的技术将属性公开给内部控件。数据绑定在大多数情况下都可以工作,但是当使用这种类型的数据绑定到可能包含ui元素的项集合时,似乎会出现一些问题。在这种情况下,对这些元素的数据绑定似乎是错误的。我一直在努力使用不同的技术来向内部控件公开属性。数据绑定在大多数情况下都可以工作,但是当使用这种类型的数据绑定到可能包含ui元素的项集合时,似乎会出现一些问题。在这种情况下,对这些元素的数据绑定似乎是错误的。