2012-01-24 6 views
0

私はジョークのリストを持っていて、すべて正常に動作していますが、TextBlockに情報を表示するたびにDataContextを再設定する必要があります。 SAMEページでTextBlockが変更され、新しいジョークを取得するためにジョークIDのみを変更したいと考えています。Windows PhoneでDataContextを操作する

私のXAMLで私が正しく動作{バインディングの説明}性質を持っていますが、私は本当にこの冗長と役に立たない感じ
private IList<Jokes> data; 
    Array variable; 
    private int count; 

    // Constructor 
    // ObservableCollection<Jokes> = new ObservableCollectoin<Jokes>; 
    public MainPage() 
    { 
     InitializeComponent(); 
     JokeRepository countryRepository = new XmlJokeRepository(); 
     data = countryRepository.GetCountryList().ToList<Jokes>(); 
     DataContext = countryRepository.GetCountryById(3); 
      } 
private void nextIconClick(object sender, EventArgs e) 
    { 
     Random rand = new Random(); 
     int holder = rand.Next(1, count); 
     DataContext = data.FirstOrDefault(c => c.ID == holder); 
       } 

。私はまだ同じ変数/ページを使用していますが、毎回DataContextをリセットすることなくこれを行う別の方法はありますか?

答えて

0

CurrentJokeなどのプロパティを作成してから、DataContextに設定することができます。

NotifyPropertyChangedイベントを起動すると、TextBoxの最新のデータがCurrentJokeに更新されます。あなたのXAMLで

public class Page : INotifyPropertyChanged 
{ 
    private string currentJoke; 
    public event PropertyChangedEventHandler PropertyChanged; 

    public string CurrentJoke 
    { 
     get 
     { 
      return currentJoke; 
     } 
     set 
     { 
      if (currentJoke == value) 
       return; 

      currentJoke = value; 
      OnPropertyChanged(new PropertyChangedEventArgs("CurrentJoke")); 
     } 
    } 

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     if (this.PropertyChanged != null) 
      this.PropertyChanged(this, e); 
    } 
} 

、あなたがDescriptionのために使用したのと同じ{Binding CurrentJoke}構文を使用して設定します。

は、ここで(テストされていないが、かなり近い)コードサンプルです。 DataContextは、1つのフィールドにデータバインディングが正しく設定されていると、ページ全体ですでに正しく設定されている可能性があります。

+0

どのようにDataContextを設定できますか? – Gustavo

+0

ありがとう、試しに行く – Gustavo

+0

よろしくお願いします。まだMVVMパターンを読んでいないのであれば、それを読む価値があるかもしれません。私はいつもアプリで使っているわけではありませんが、データバインディングを効果的に使う方法を理解するのに役立ちます。 –

関連する問題