серебристый переплет - PullRequest
       1

серебристый переплет

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


Я пишу простое приложение Silver Light и испытываю некоторые проблемы с привязкой, я довольно хорошо знаком с привязкой wpf, но здесь я должен сделать что-то не так,
хорошо, я начал с привязки коллекции к источнику элемента списка, но привязка не была выполнена, и мое событие PropertyChanged всегда было нулевым. Я попытался использовать простую привязку текстового блока к свойству текста без результатов, единственный способ просмотреть текст - это жестко закодированный текст xaml
это мой класс контекста данных:
открытый класс DataContextItems: INotifyPropertyChanged {

    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    } 

    #region private members
    ObservableCollection<string> test;
    ObservableCollection<PlayListItem> _PlayList;
    PlayListItem[] _PlayListItems;
    #endregion

    #region public members
    public event PropertyChangedEventHandler PropertyChanged;
    public ObservableCollection<PlayListItem> PlayList 
    {
        get { return _PlayList; }
        set
        {
           _PlayList = value;
           OnPropertyChanged("PlayList"); 
        }
    }
    public PlayListItem[] PlayListItems
    {
        get { return _PlayListItems; }
        set { _PlayListItems = value; }
    }

    public Action<List<PlayListItem>> PlayListItemCallback 
    {
        get { return PlayListArrived; }
    }
    #endregion

    #region constructor
    public DataContextItems()
    {

        _PlayListItems = new PlayListItem[0];
        _PlayList = new ObservableCollection<PlayListItem>();
    }
    #endregion

    #region events
    void PlayListArrived(List<PlayListItem> playList)
    {
        foreach (PlayListItem item in playList)
            PlayList.Add(item);

    }
    #region events


}

xaml:
элементы управления: TabItem Header = "search">
управления: TabItem.ContentTemplate>
DataTemplate>
Сетка>
Grid.ColumnDefinitions>
ColumnDefinition />
/Grid.ColumnDefinitions>
ListBox Background = "Grey" ItemsSource = "{Binding PlayList, Mode = TwoWay, DisplayMemberPath =" Name "}">
/ ListBox>
/ Grid>
/ DataTemplate>
/controls:TabItem.ContentTemplate>
/ controls: TabItem>

контекст данных инициализируется в событии Loaded (я тоже пробовал в конструкторе)

private void UserControl_Loaded (отправитель объекта, RoutedEventArgs e)
{
DataContext = MediaWebControlLogic.Instance.GetContext ();
}

вот как я создаю объект
внутренние DataContextItems GetContext ()
{
MediaPlayerWebControl.DAL.MediaMediator mediator = new MediaPlayerWebControl.DAL.MediaMediator (); DataContextItems context = new DataContextItems ();
mediator.GetPlayList (context.PlayListItemCallback);
возврат контекста;
}

список заполнен асинхронным вызовом. Я думал, что это может быть проблемой, но простое свойство текста тоже не связывалось ...
какие-либо предложения?
Спасибо
Эран

Ответы [ 2 ]

1 голос
/ 24 декабря 2010

Неверный синтаксис: "{Binding PlayList, Mode = TwoWay, DisplayMemberPath =" Name "}"

Использование:

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

ОК, я нашел это ... дело в том, что TabItem DataContext не был тем же самым, что TabControl DataContex, поэтому я не мог просто использовать свойство «Имя», после привязки TabItem DataContext к TabControl DataContext привязку работал нормально для меня

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