Привязка данных к свойству в viewModel - PullRequest
0 голосов
/ 28 июля 2011

, конечно, этот вопрос обсуждался тысячи раз, но я не нашел подходящего решения для моих нужд. Я новичок в SilverLIght, и я намеревался хорошо начать использовать MVVM. Поэтому я сделал следующий вид модели:

public class MyViewModel 
    {
          private IRepository _Repository;
          public string CountText { get; set; }
          public MyViewModel (IRepository repository)
        {

            _Repository = repository;
            CountText = "test ctor";
        }

         public void MyButtonCommand()
        {
            _Repository.GetResult((Result r) => MyActionAsync(r), (Exception e) => ManageException(e));
        }

 public void MyActionAsync(SchedeConsunitiviResult result)
        {
            CountText = string.Format("{0} items", result.Count);
        }

        public void ManageException(Exception e)
        {
            //to log the exception here and display some alert message
        }

}

и вот мой xaml:

<sdk:Label Content="{Binding Path=CountText, Mode=TwoWay}" Grid.Row="3" Height="28" HorizontalAlignment="Left" Margin="12,142,0,0" Name="label1" VerticalAlignment="Top" Width="120" Grid.ColumnSpan="2" />

Первый экземпляр CountText виден в метке. Но второй после асинхронного метода не меняет содержимое LAbel. Должен ли я добавить какой-то механизм, например PropertyChanged, чтобы сказать, что это свойство изменилось? если да, то как я могу это сделать, используя только xaml?

спасибо за помощь

Ответы [ 2 ]

2 голосов
/ 28 июля 2011

Реализуйте INotifyPropertyChanged и уведомите, что ваша собственность изменилась с EventHandler.

public class MyViewModel : INotifyPropertyChanged
{
    private string countText;

    public string CountText        
    {
        get { return this.countText; }
        set { this.countText = value; NotifyPropertyChanged("CountText"); }
    }

    .....snip.....

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(params string[] properties)
    {
        if (PropertyChanged != null)
        {
            foreach (string property in properties)
                PropertyChanged.Invoke(this, new PropertyChangedEventArgs(property));
        }
    }
}
0 голосов
/ 28 июля 2011

Насколько я знаю, вам нужен механизм, подобный PropertyChanged, в вашей модели представления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...