Silverlight: использование DataContextProxy для доступа к элементам ObserableCollection - PullRequest
0 голосов
/ 15 декабря 2010

Я пытаюсь заставить работать привязку в заголовке столбца сетки, у которого нет доступа к 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 вот так - я даже не уверен, как он знает, какой элемент в коллекции посмотреть.

1 Ответ

0 голосов
/ 15 декабря 2010

В вашей реализации TabItemViewModel вы определили ErrorHeading два раза.

В одном месте вы пишете

 RaisePropertyChanged("ErrorHeading");

в то время как в другом месте вы написали

 OnPropertyChanged("ErrorHeading");

Похоже, что в вашем коде есть серьезные проблемы. Кроме того, вы не реализовали интерфейс INotifyPropertyChanged в своем TabItemViewModel.

Так что сначала исправьте эти проблемы. Возможно, тогда вы сможете сделать что-то более элегантное в своем коде. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...