- Bill
- Jack
- Bob
- Kevin
MyComboBox.ItemsSource = MyObservableCollection;
功能正常。但我不知道如何在XAML中处理在代码后台声明的集合。
提前感谢社区(再次)。
*编辑:
这是我声明和访问集合的方式。
public ObservableCollection<string> propertynames
{
get {return _propertynames;}
}
private ObservableCollection<string> _propertynames;
我尝试的最后一件事是这样的:
<Window.Resources>
<CollectionViewSource Source="{Binding propertynames}" x:Key="srcSort"/>
</Window.Resources>
....
<ComboBox x:Name="cboSort" HorizontalAlignment="Left" VerticalAlignment="Top"
Width="256" Background="WhiteSmoke" Margin="12,50,0,0" FontSize="12pt"
Height="27.28"
SelectedIndex="0"
SelectionChanged="cboWorkCenters_SelectionChanged"
ItemsSource="{Binding Path = {StaticResource srcSort}}">
</ComboBox>
....
我对这些东西完全不了解。现在只涉足IT技术一周,所以我可能做了些对于老手来说非常显然的事情。
*编辑 #2
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:WpfApplication1"
Title="Window1" Height="226" Width="242"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<ComboBox Margin="43,71,40,77"
Name="comboBox1"
ItemsSource="{Binding ob}" />
</Grid>
</Window>
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public ObservableCollection<string> ob
{
get
{
return _ob;
}
}
private ObservableCollection<string> _ob = new ObservableCollection<string>();
public Window1()
{
InitializeComponent();
FillObj();
//comboBox1.ItemsSource = ob;
}
private void FillObj()
{
for (int i = 1; i < 6; i++)
{
_ob.Add(i.ToString());
}
}
}
}
我做了一个非常简单的项目来检查我是否完全搞错了。这个项目工作得很好,所以一定是其他原因导致它失败。
*编辑 #3 *问题已解决
天哪,我终于找到了解决方法。我花了几个小时的时间,但实际上只是一些愚蠢的错误导致了失败。
解决方法是:在声明时没有初始化 _propertynames。我通过 Linq 查询类属性以获取属性列表,然后通过将 ...GetProperties.ToList<...>() 传递给构造函数来创建 _propertynames。显然,你必须先实例化变量,这样它才能在 InitializeComponent 中使用。一旦我这样做了,并在之后添加了条目,它就正常工作了。
我希望 WPF 有一个面孔,这样我就可以打它了。我知道这是我不了解它的工作方式,但我真的需要一些提示信息。
感谢大家的帮助。一旦解决了根本问题,你们两个的建议都很有用。
private ObservableCollection<string> _propertynames
需要完成
private ObservableCollection<string> _propertynames = new ObservableCollection<string>()
Source=
。 - H.B.