2011-07-28 73 views
0

肯定這個問題已經辯論了數千次,但我沒有找到任何合適的解決方案來滿足我的需要。我是SilverLIght的新手,我打算使用MVVM開始。因此 我做了以下視圖模型:DataBinding在viewModel中的一個屬性

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的第一instanciation在標籤可見。但異步方法之後的第二個不會更改LAbel的內容。我應該添加一些像PropertyChanged這樣的機制來告訴視圖這個屬性已經改變了嗎?如果是這樣,我該如何使用xaml來做到這一點?

THX對您有所幫助

回答

2

落實INotifyPropertyChanged,並通知你的財產已與事件處理程序改變。

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)); 
     } 
    } 
} 
+1

又吼,它就像一個魅力! – Arthis

0

據我知道你需要一個像的PropertyChanged一種機制,在視圖模型

+0

thx爲答案我成功地使用了Arcturus代碼,但你也是對的! – Arthis

相關問題