MVVM

MVVM: Uma ObservableCollection assícrona

Quando estamos programando usando o Padrão MVVM, pode ser que nós precisemos uma coleção multi thread, que possa ser alterada de uma thread diferente da thread da UI.

Para resolver este problema o Thomas Levesque’s desenvolveu uma solução e postou no seu blog.

Eis o código:

using System.Threading;

public class AsyncObservableCollection<T> : ObservableCollection<T>
{
    private SynchronizationContext _synchronizationContext = SynchronizationContext.Current;

    public AsyncObservableCollection()
    {
    }

    public AsyncObservableCollection(IEnumerable<T> list)
        : base(list)
    {
    }

    protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
    {
        if (SynchronizationContext.Current == _synchronizationContext)
        {
            // Execute the CollectionChanged event on the current thread
            RaiseCollectionChanged(e);
        }
        else
        {
            // Raises the CollectionChanged event on the creator thread
            _synchronizationContext.Send(RaiseCollectionChanged, e);
        }
    }

    private void RaiseCollectionChanged(object param)
    {
        // We are in the creator thread, call the base implementation directly
        base.OnCollectionChanged((NotifyCollectionChangedEventArgs)param);
    }

    protected override void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        if (SynchronizationContext.Current == _synchronizationContext)
        {
            // Execute the PropertyChanged event on the current thread
            RaisePropertyChanged(e);
        }
        else
        {
            // Raises the PropertyChanged event on the creator thread
            _synchronizationContext.Send(RaisePropertyChanged, e);
        }
    }

    private void RaisePropertyChanged(object param)
    {
        // We are in the creator thread, call the base implementation directly
        base.OnPropertyChanged((PropertyChangedEventArgs)param);
    }
}

Algo sem dúvida de grande utilidade.

Link do post original (em inglês): [WPF] Binding to an asynchronous collection »  Thomas Levesque’s .NET blog

.Net: Pegar a versão do aplicativo

Certas vezes temos a necessidade de pegar a versão atual do aplicativo (*.exe ou *.dll) para mostrar ao usuário, ou fazer alguma tarefa que envolva a versão.

Para fazer isso, use o código abaixo:

C#:

        public string AppVersion
        {
            get { return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); }
        }

VB.NET:

        Public ReadOnly Property AppVersion() As String
        	Get
        		Return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()
        	End Get
        End Property

Se você está usando o padrão MVVM no seu projeto, basta colar a propriedade acima na ViewModel, e utilizar DataBinding na View.

Até a próxima.