Silverlight:使用DataContextProxy访问ObserableCollection元素

时间:2010-12-15 03:12:29

标签: silverlight xaml

我正在尝试在无法访问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 - 我甚至不确定它是如何知道集合中的哪个元素要看的。

1 个答案:

答案 0 :(得分:0)

TabItemViewModel实施中,您已定义ErrorHeading两次。

在你写的一个地方

 RaisePropertyChanged("ErrorHeading");

而你写的另一个地方

 OnPropertyChanged("ErrorHeading");

您的代码看起来有些严重问题。最重要的是,您尚未在INotifyPropertyChanged中实施界面TabItemViewModel

首先解决这些问题。也许,那么你就可以在你的代码中做更优雅的事情了。 : - )