2011-06-25 16 views
4

ViewModelにバインドされたContentControlを含むWPF(およびEntity Framework 4とMVVMパターンを使用)からExpanderがあります。私が望むのは、このコンテンツコントロールをバインドすることです。LAZILY。つまり、私はをExpanderが開かれたときに「取得」したいと思っています。遅延WPFバインディング

どうすればよいですか?内部の複雑なウィンドウを作る方法ViewModels

答えて

4

あなたは、あなたのViewModelにIsExpandedプロパティを追加し、それにエキスパンダーを結合し、そしてContentControlの内容を返すときに考慮に入れ、そのプロパティの値を取ることができる:

private bool _isExpanded; 
public bool IsExpanded 
{ 
    get { return _isExpanded; } 
    set 
    { 
     _isExpanded = value; 
     OnPropertyChange("IsExpanded"); 
     OnPropertyChange("Content"); 
    } 
} 

public SomeType Content 
{ 
    get 
    { 
     if (!_isExpanded) 
      return null; 
     return LoadContent(); 
    } 
} 
+0

コンテンツをキャッシュします。この方法では、LoadContentメソッドを何度も呼び出している可能性があります。 –

+0

@Erno、確かにそうすることができますが、OPが正確に何を望んでいるかによって異なります... –

+0

リソースを取得するのが高価なので、ほとんどの場合、遅延ロードが必要なのでコメントを追加しました。それは批判の意味ではありませんでした。ちょうど追加。 –

0

上記と同様の別のオプションをObservableCollectionを作成することがありますが、エクスパンダが最初に開かれたときにのみそれを設定します。

関連する問題