.net Can';不要把我的头缠在wpf数据绑定上
我的设想: wpf表单有一个文本框和一个wpf toolkig。 在文本框中输入文本时,“我的服务”将返回一个.net Can';不要把我的头缠在wpf数据绑定上,.net,wpf,data-binding,observablecollection,.net,Wpf,Data Binding,Observablecollection,我的设想: wpf表单有一个文本框和一个wpf toolkig。 在文本框中输入文本时,“我的服务”将返回一个IEnumerable项。我希望datagrid显示此服务的结果 我试着在谷歌上搜索,但我找不到答案。我才刚刚开始学习WPF,大多数使用的术语我都不知道。 我的想法是,我应该把我的服务结果放在一个明显的集合中,没有汗水。 但是我想以某种方式将它绑定到我的数据网格。我该怎么做?网格如何知道要生成哪些列?将网格的数据源(甚至数据上下文)设置为可观察的集合 我不熟悉该数据网格,但大多数网格都有
IEnumerable
项。我希望datagrid显示此服务的结果
我试着在谷歌上搜索,但我找不到答案。我才刚刚开始学习WPF,大多数使用的术语我都不知道。我的想法是,我应该把我的服务结果放在一个明显的集合中,没有汗水。 但是我想以某种方式将它绑定到我的数据网格。我该怎么做?网格如何知道要生成哪些列?将网格的数据源(甚至数据上下文)设置为可观察的集合 我不熟悉该数据网格,但大多数网格都有选项,可以将可观察集合中该类型的所有公共属性公开为列,也可以在XAML中显式设置列布局,列定义的属性之一是要用于列数据的对象的属性 e、 g.基础设施数据网格
<igDP:Field Name="OrderSize" Label="Order Size">
<igDP:Field.Settings >
<igDP:FieldSettings CellWidth="75">
<igDP:FieldSettings.EditorStyle>
<Style TargetType="{x:Type Editors:ValueEditor}" >
<Style.Setters>
<Setter Property="Format" Value="#,##0"/>
</Style.Setters>
</Style>
</igDP:FieldSettings.EditorStyle>
</igDP:FieldSettings>
</igDP:Field.Settings>
</igDP:Field>
名称是在对象上设置要使用的属性的位置。将网格的数据源(甚至DataContext)设置为可观察的集合
我不熟悉该数据网格,但大多数网格都有选项,可以将可观察集合中该类型的所有公共属性公开为列,也可以在XAML中显式设置列布局,列定义的属性之一是要用于列数据的对象的属性
e、 g.基础设施数据网格
<igDP:Field Name="OrderSize" Label="Order Size">
<igDP:Field.Settings >
<igDP:FieldSettings CellWidth="75">
<igDP:FieldSettings.EditorStyle>
<Style TargetType="{x:Type Editors:ValueEditor}" >
<Style.Setters>
<Setter Property="Format" Value="#,##0"/>
</Style.Setters>
</Style>
</igDP:FieldSettings.EditorStyle>
</igDP:FieldSettings>
</igDP:Field.Settings>
</igDP:Field>
名称是在对象上设置要使用的属性的位置。网格可以直接生成列,也可以指定所需的列类型。如果你看这个,它会解释的。这是针对VS2010的,但是VS2008的基本原理是相同的——尽管实现略有不同,因为它没有那么集成
至于如何绑定,请将保存项目的ObservableCollection分配给网格的ItemsSource属性。网格可以直接构建列,也可以指定所需的列类型。如果你看这个,它会解释的。这是针对VS2010的,但是VS2008的基本原理是相同的——尽管实现略有不同,因为它没有那么集成 至于如何绑定,请将保存项目的ObservableCollection分配给网格的ItemsSource属性 我的想法是,我应该把我的服务结果放在一个明显的集合中,没有汗水。但是我想以某种方式将它绑定到我的数据网格。我该怎么做 最简单的方法是将DataGrid的ItemsSource属性设置为ObservableCollection 网格如何知道要生成哪些列 DataGrid反映该集合中的对象,并为其找到的每个公共属性创建一列。有关更多信息,请参阅 如果您直接设置ItemsSource属性,那么它实际上不是wpf绑定。以下是我在WPF中开始数据绑定时发现的三个有用链接
我的想法是,我应该把我的服务结果放在一个明显的集合中,没有汗水。但是我想以某种方式将它绑定到我的数据网格。我该怎么做 最简单的方法是将DataGrid的ItemsSource属性设置为ObservableCollection 网格如何知道要生成哪些列 DataGrid反映该集合中的对象,并为其找到的每个公共属性创建一列。有关更多信息,请参阅 如果您直接设置ItemsSource属性,那么它实际上不是wpf绑定。以下是我在WPF中开始数据绑定时发现的三个有用链接
虽然ObservableCollection可以用于此目的,但取决于它的使用方式,您不会从中获得任何好处。ObservableCollection的关键特性是它实现INotifyCollectionChanged。这个接口所做的是提供一个通知机制,告诉UI属性已经更改。由于ObservableCollection已经实现了这一点,如果您将DataGrid、ListBox、ItemsControl等的ItemSource属性绑定到这种类型的集合,则在添加/删除/替换/移动/重置项时,它将自动更新UI。因此,每次要使用新的IEnumerable结果集更新集合时,都必须首先清除集合,然后添加新结果 然而,在这种情况下,我建议使用另一种方法来替代ObservableCollection。它是使用一种叫做ObjectDataProvider的东西。使用此方法,我们可以完全避免代码隐藏,而且总体上更干净。所以我们在某处有我们的服务,在本例中是在my Window.xaml.cs中
public class TranslationService
{
public IEnumerable<string> Translate(string s)
{
return s.ToCharArray().Select(c => c.ToString());
}
}
现在,在Window.Resources(或UserControl,或其他任何地方)中,我们可以引用我们的服务。一旦我们将服务公开为资源,我们就可以创建一个ObjectDataProvider,它公开我们希望使用的Translate方法
<Window.Resources>
<local:TranslationService x:Key="MyTranslationService" />
<ObjectDataProvider x:Key="MyProvider"
ObjectInstance="{StaticResource MyTranslationService}"
MethodName="Translate">
<ObjectDataProvider.MethodParameters>
""
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
""
ObjdDATA提供程序对我们的服务进行键入,用字符串PAR调用翻译方法
<StackPanel>
<TextBox TextChanged="OnTextChanged"
Text="{Binding Source={StaticResource MyProvider}, Path=MethodParameters[0], BindsDirectlyToSource=True, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" />
<ListBox ItemsSource="{Binding Source={StaticResource MyProvider}}" />
</StackPanel>