CollectionViewSource将源代码绑定到webservice(使用WCF RIA服务和LINQ) - Si

本文关键字:服务 RIA LINQ Si WCF 使用 源代码 绑定 webservice CollectionViewSource | 更新日期: 2023-09-27 17:49:15

我有一个小问题,可能是愚蠢的,但我不能解决这个问题。无论如何,我要做的就是绑定我的CollectionViewSource。我在Silverlight 4中使用WCF RIA服务查询的源代码。

这是我的XAML:

<UserControl.Resources>
    <CollectionViewSource x:Name="cvsServiceTypes" />
</UserControl.Resources>
<Grid>
    <ComboBox Height="23" HorizontalAlignment="Left" ItemsSource="cvsServiceTypes" DisplayMemberPath="Type" SelectedValuePath="IDServicesType" Margin="154,51,0,0" Name="cbServiceType" VerticalAlignment="Top" Width="120" SelectedValue="{Binding fkservicetype, Mode=TwoWay}" />
</Grid>

And my CodeBehind:

  public Services()
  {
      InitializeComponent();
      webService.GetServiceTypesCompleted += (s, e) => { cvsServiceTypes.Source = e.Result; };
      webService.GetServiceTypesAsync();
   }

但它似乎不起作用…我做错了什么?

非常感谢!

CollectionViewSource将源代码绑定到webservice(使用WCF RIA服务和LINQ) - Si

我希望您不介意我忽略了web服务调用部分—看起来您正在努力将项目绑定到ComboBox,所以这是我要解决的部分。

你需要做以下事情:

  1. 创建一个ObservableCollection属性来包含你的项目。
  2. 绑定CollectionViewSource
  3. 绑定组合框。ItemsSource到CollectionViewSource.
  4. 在你的UserControl上设置数据上下文

下面是一个例子:

<UserControl ...>
    <StackPanel>
        <StackPanel.Resources>
            <CollectionViewSource x:Key="cvs" Source="{Binding Path=Items}"></CollectionViewSource>
        </StackPanel.Resources>
        <ComboBox ItemsSource="{Binding Source={StaticResource ResourceKey=cvs}}" />
        <ComboBox ItemsSource="{Binding Source={StaticResource ResourceKey=cvs}}" />
        <ComboBox ItemsSource="{Binding Source={StaticResource ResourceKey=cvs}}" />
    </StackPanel>
</UserControl>

代码:

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
        this.DataContext = this;
        _items.Add("a");
        _items.Add("b");
    }
    private ObservableCollection<string> _items = new ObservableCollection<string>();
    public ObservableCollection<string> Items
    {
        get { return _items; }
        set { _items = value; }
    }
}

您可以在web服务调用完成时将项目放入集合中,如下所示:

webService.GetServiceTypesCompleted += (s, e) => 
{
    foreach (string s in e.result)
    {
        _items.Add(s);
    }
};