Pergunta

Se eu quiser ligar uma coleção para um algum tipo de lista de controle em Silverlight. É a única maneira de fazê-lo assim que os objetos subjacentes na coleção implementar INotifyPropertyChanged e para a recolha de ser um ObservableCollection?

Se eu estava usando algum tipo de terceira objeto partido, por exemplo, que retornou por um serviço web, eu teria que envolvê-lo ou mapeá-lo para algo que implementa INotifyPropertyChanged?

Foi útil?

Solução

Não, uma vez que você adicionar uma referência de serviço para o seu projeto do Silverlight no Visual Studio, você pode botão direito do mouse-lo e configurá-lo de tal forma que ele usa um ObservableCollection (que é a configuração de qualquer maneira padrão)

Além disso, a referência de serviço por padrão garantir que tipos retornados do serviço já implementam INotifyPropertyChanged.

Outras dicas

Você pode vincular uma lista a qualquer coleção IEnumerable ou um controle simples de qualquer propriedade do objeto. A desvantagem é que você recebe nenhuma notificação chnage se os itens são adicionados à lista ou propriedades são alteradas. Por isso, depende da sua aplicação, se este é um problema ou não.

Como Maurice disse, você pode ligar para qualquer coleção (mesmo IEnumerable) eo trabalho vontade de ligação, mas você não receberá notificações de mudança. Note, no entanto, que você não precisa usar ObservableCollection, qualquer coisa que implementa INotifyCollectionChanged trabalho vontade (embora ObservableCollection é o mais simples).

Não é necessário para objetos dentro da coleção para implementar INotifyPropertyChanged, mas se eles fizerem isso, então você vai obter notificações a cada mudança individual.

Só para ficar claro, você pode OneTime se ligam a qualquer objeto. Se você quiser OneWay ou TwoWay ligamento você vai nido um objeto suporta uma dessas interfaces. Como mencionado, a criação do Serviço de Referência faz isso para você para objetos entregues via webservice. No entanto, se por algum motivo, você ainda precisa para produzir um objeto Bindable de uma classe legado, você poderia implementar um conversor que implementa IValueConverter e depois usá-lo para "embrulhar" o seu objeto legado em um Bindable um viver esta:

<UserControl>
    <UserControl.Resources>
        <local:FooToBindableFooConverter x:Key="BindableFooConverter"/>
    </UserControl.Resources>
    <TextBlock Text="{Binding FooInstance, Converter={StaticResource BindableFooConverter}}"/>

</UserControl>

Os conversores são muito poderoso e pode resolver muitas "Eu preciso de X, mas eu tenho Y" problemas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top