2010-12-15 11 views
0

DataContextにアクセスできないグリッド列のヘッダーでバインディングを取得しようとしています。 http://weblogs.asp.net/dwahlin/archive/2009/08/20/creating-a-silverlight-datacontext-proxy-to-simplify-data-binding-in-nested-controls.aspxSilverlight:DataContextProxyを使用してObserableCollection要素にアクセスする

をこれは私のViewModelの簡易版である:

public class ViewModel : INotifyPropertyChanged 
{ 
private String _myString; 
private ObservableCollection<TabItemViewModel> _tabItems; 

public String MyString { blah... } 
public ObservableCollection<TabItemViewModel> TabItems {blah... } 
} 

、それはこのようにXAMLを使用してMyStringにアクセスするために動作します:

<TextBlock Text="{Binding Source={StaticResource DataContextProxy}, Path=DataSource.MyString}"/> 
それにアクセス権を与えるために、私はDataContextProxyは、ここで説明する使用しました

しかし、私は、TabItemViewModelsのobservableコレクション内のErrorHeadingを指すようにする方法を知りません...

public class TabItemViewModel : INotifyPropertyChanged 
{ 
private string _errorHeading; 

public string ErrorHeading 
    { 
     get { return _errorHeading; } 
     set 
     { 
      _errorHeading = value; 

      RaisePropertyChanged("ErrorHeading"); 
     } 
    } 



} 

私はこのようにそれを試してみました:

<TextBlock Text="{Binding Source={StaticResource DataContextProxy}, Path=DataSource.TabItems.ErrorHeading}"/> 

が、私はあなたがこのようのObservableCollectionに掘ることができると思ういけない - 私はそれを見にコレクション内のどの要素を知っているかさえわかりません。

答えて

0

TabItemViewModel実装では、ErrorHeadingを2回定義しました。あなたのコードにいくつかの深刻な問題があるようにあなたが

OnPropertyChanged("ErrorHeading"); 

を書いた別の場所に見えますが一箇所に

あなたは

RaisePropertyChanged("ErrorHeading"); 

を書きます。その上に、TabItemViewModelにインターフェイスINotifyPropertyChangedを実装していません。

まず、これらの問題を解決してください。たぶん、あなたのコードでよりエレガントなことをすることができるでしょう。 :-)

+0

これはちょうどコピーの貼り付けエラーでした、これは私の初めてのstackoverflowサイトを使用しています。私はINotifyPropertyChangedを実装しましたが、簡潔にするために残しました。 – scoorey

関連する問題