Pergunta

Eu tenho o Employeelist como uma observação de objeto de funcionários.

O objeto do funcionário tem salário.

Quero exibir alguns valores, como o salário médio dos funcionários no XAML, e o campo da interface do usuário deve ser atualizado automaticamente quando um item for adicionado à lista ou quando o campo de salário for alterado em qualquer um dos itens atualizados.

Isso pode ser alcançado criando uma propriedade para a média e ouvindo manipuladores alterados e proibidos na lista.

Mas tenho certeza de que deve haver outra maneira melhor de fazer isso. (Como usar o anexo outproperties ou o IVALUECONVERTER/imultivalueConverter)

Em relação a isso, tenho perguntas seguintes.

  1. É possível usar o imultivalueConverter para uma lista/observableCollection de itens? O conversor deve ser chamado quando um item adicionado à lista e quando uma propriedade específica foi alterada?
Foi útil?

Solução

Usar uma propriedade é definitivamente o caminho a percorrer, especialmente do ponto de vista do MVVM. Acho Occam's Razor: Basicamente, a solução mais simples é geralmente a melhor.

É certamente a solução mais limpa e, portanto, mais sustentável. Além disso, é o mais expansível (você pode adicionar facilmente novas propriedades para cálculos diferentes, se quiser).

Tudo o que você precisa fazer é criar propriedades somente leitura e ligue para o PropertyChanged com o nome da propriedade quando a coleção muda (o que parece que você está fazendo).

Por exemplo, aqui está uma propriedade "média":

public Double Average   
{
    get { return mMyCollection.Average(); }
}

void mMyCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    PropertyChanged(this, new PropertyChangedEventArgs("Average"));
}

As propriedades anexadas não funcionam - elas são para especificar a propriedade dos pais em um elemento filho.

O ValueConverters funcionaria, em teoria (embora provavelmente tenham que estar em cada item da lista, bem como em toda a coleção), mas você não está convertendo nada, está fornecendo dados adicionais com base nos dados existentes. Para fazer isso, você precisaria se movimentar com todos os tipos de modelos e, sempre que precisava mudar qualquer coisa, precisará se movimentar com eles novamente. Ficaria complexo com pressa e sem benefício.

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