CollectionViewSource связывает источник с веб-сервисом (используя службы WCF RIA и LINQ) - Silverlight - PullRequest
1 голос
/ 08 апреля 2011

У меня небольшая проблема, возможно, глупая, но я не могу этого понять ... В любом случае, все, что я пытаюсь сделать, это привязать мой CollectionViewSource.Source к моему результирующему запросу в Silverlight 4 со службами RIA WCF.

Это мой 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>

И мой CodeBehind:

  public Services()
  {
      InitializeComponent();

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

Но, похоже, это не работает ... что я делаю не так?

Большое спасибо!

1 Ответ

2 голосов
/ 08 апреля 2011

Надеюсь, вы не возражаете, если я проигнорирую часть вызова веб-службы - похоже, вы боретесь с привязкой своих элементов к ComboBox, поэтому я обращусь к этой части.

Вынеобходимо сделать следующее:

  1. Создать свойство ObservableCollection для содержания ваших элементов.
  2. Привязать CollectionViewSource.Source к ObservableCollection.
  3. Привязать ComboBox.ItemsSourceв CollectionViewSource.
  4. Установите DataContext в вашем 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; }
    }
}

Вы можете поместить элементы в коллекцию, когда ваш вызов веб-службы завершается следующим образом:

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