2010-12-15 4 views
0

DataContext에 액세스 할 수없는 그리드 열 머리글에서 바인딩을 실행하려고합니다. 그것에게 액세스 권한을 부여하기 위해, 나는 DataContextProxy 여기에 설명 사용 : http://weblogs.asp.net/dwahlin/archive/2009/08/20/creating-a-silverlight-datacontext-proxy-to-simplify-data-binding-in-nested-controls.aspxSilverlight : DataContextProxy를 사용하여 ObserableCollection 요소에 액세스하십시오.

이 단순화 내 뷰 모델의 버전입니다 :

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}"/> 

하지만 Obtainable 컬렉션의 TabItemViewModels 내에서 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을 두 번 정의했습니다. 다른 장소 당신은 당신의 코드에 몇 가지 심각한 문제가 같은

OnPropertyChanged("ErrorHeading"); 

이 보이는 작성한 동안 한 곳에서

당신은

RaisePropertyChanged("ErrorHeading"); 

물품. 그 위에는 TabItemViewModel에 인터페이스 INotifyPropertyChanged을 구현하지 않았습니다.

먼저 이러한 문제를 해결하십시오. 어쩌면 코드에서 좀 더 우아한 것을 할 수있을 것입니다. :-)

+0

미안하지만, 그냥 복사 붙여 넣기 오류가 발생했습니다, 이것은 stackoverflow 사이트를 사용하여 처음입니다. 나는 INotifyPropertyChanged를 구현했지만 간략하게 설명했다. – scoorey

관련 문제