Я пытаюсь заставить работать привязку в заголовке столбца сетки, у которого нет доступа к DataContext. Чтобы дать ему доступ, я использовал описанный здесь DataContextProxy: http://weblogs.asp.net/dwahlin/archive/2009/08/20/creating-a-silverlight-datacontext-proxy-to-simplify-data-binding-in-nested-controls.aspx
Это упрощенная версия моей ViewModel:
public class ViewModel : INotifyPropertyChanged
{
private String _myString;
private ObservableCollection<TabItemViewModel> _tabItems;
public String MyString { blah... }
public ObservableCollection<TabItemViewModel> TabItems {blah... }
}
и он работает для доступа к MyString с использованием XAML следующим образом:
<TextBlock Text="{Binding Source={StaticResource DataContextProxy}, Path=DataSource.MyString}"/>
но я не уверен, как заставить его указывать на ErrorHeading внутри наблюдаемой коллекции TabItemViewModels ...
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 вот так - я даже не уверен, как он знает, какой элемент в коллекции посмотреть.