Mor*_*ker 12 c# data-binding wpf xaml binding
如果我想在代码隐藏中绑定像组合框一样的东西我完全没有问题.就像是 :
List<string> strings = new List<string>();
AddStringsFromDataSourceToList(strings);
comboBox1.ItemSource = strings;
Run Code Online (Sandbox Code Playgroud)
据我所知,在XAML中没有快速而肮脏的方法.对于wpf为其超级简单的数据绑定所接受的所有赞誉,这个简单的东西似乎在C#中更容易实现.有没有比创建DependencyProperty包装器并将它们添加为资源而没有来自intellisense或ObservableCollections的所有帮助更简单的方法?我明白这不是不可能的,但如果这么简单的任务看起来如此深入,我一定会遗漏一些东西......
编辑:澄清一下,添加动态列表是问题,而不是静态数组.正如许多人所指出的那样,手动添加项目非常容易.
Naw*_*waz 39
<Window.Resources>
<x:Array x:Key="strings" Type="sys:String"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>One</sys:String>
<sys:String>Two</sys:String>
</x:Array>
<!-- likewise -->
<x:Array x:Key="persons" Type="{x:Type local:Person}"
xmlns:local="clr-namespace:namespace-where-person-is-defined">
<local:Person FirstName="Sarfaraz" LastName="Nawaz"/>
<local:Person FirstName="Prof" LastName="Plum"/>
</x:Array>
<Window.Resources>
<ComboBox ItemsSource="{StaticResource strings}" />
<ListBox ItemsSource="{StaticResource persons}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<Run Text="{Binding FirstName}"/>
<Run Text=" "/>
<Run Text="{Binding LastName}"/>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
你在寻找这样的东西:
<ComboBox>
<ComboBox.ItemsSource>
<x:Array Type="sys:String"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>One</sys:String>
<sys:String>Two</sys:String>
</x:Array>
</ComboBox.ItemsSource>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
如果您只想为列表定义一些项目,请查看Henk Holterman的解决方案.顺便说一句,您可以将数组声明为资源和其他类型.
更新
你似乎已经改变了你的问题.但是我现在不明白你的愿望是什么.如果要绑定代码隐藏中的集合,则创建一个返回此集合的公共属性,将DataContext设置为公开此属性的对象,并在XAML中定义绑定:
<ComboBox ItemsSource="{Binding NameOfYourCollectionProperty}"...
Run Code Online (Sandbox Code Playgroud)
希望我理解你的问题是正确的......
当然有:
<ComboBox>
<ComboBoxItem>One</ComboBoxItem>
<ComboBoxItem>Two</ComboBoxItem>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
根据您的目标,还有其他几乎同样简单的语法 - 使用资源或内联项目源,或分组数据..甚至 xml 数据。不要因为你尝试的第一件事并不容易而沮丧地举手 - 在我看来,wpf 值得学习。
WPF 之所以受到好评,是因为它比 Windows 窗体更容易将视觉效果与行为分离,并且因为它使创建漂亮的视觉效果变得更加容易,而不是因为它使执行琐碎的示例变得更容易。然而,在这种情况下 -做这个简单的例子更容易。
通过您的编辑,您想从哪里提取它们?您不必以任何方式创建依赖属性或可观察集合。一个简单的列表属性就可以了(在这种情况下,我更喜欢在 xaml 中使用 collectionviewsource )。另外,不要忘记,如果您不喜欢 XAML,则无需使用所有 XAML。但是,如果您针对 WPF 进行设计,而不是不管它,您会发现很多任务(比如这个)很容易。