我正在尝试在无法访问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... }
}
它适用于使用XAML访问MyString,如下所示:
<TextBlock Text="{Binding Source={StaticResource DataContextProxy}, Path=DataSource.MyString}"/>
但我不知道如何让它指向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 :(得分:0)
在TabItemViewModel
实施中,您已定义ErrorHeading
两次。
在你写的一个地方
RaisePropertyChanged("ErrorHeading");
而你写的另一个地方
OnPropertyChanged("ErrorHeading");
您的代码看起来有些严重问题。最重要的是,您尚未在INotifyPropertyChanged
中实施界面TabItemViewModel
。
首先解决这些问题。也许,那么你就可以在你的代码中做更优雅的事情了。 : - )