Страницы

Поиск по вопросам

пятница, 12 июля 2019 г.

Binding выбранной строки DataGrid в другом DataGrid

Есть класс Book class Book { public int Id { get; set; } public string Title { get; set; } public string Authors { get; set; } public string Genre { get; set; } public virtual ICollection Publications { get; set; } } На форме есть два (пусть будут A и B) DataGrid'a: A отображает список объектов Book, B отображает элементы Publications выбранной книги (то есть, привязка к выбранной строке в A). Вопрос в том, как правильно привязаться в B к текущей строке в A? Я делаю так, но на мой взгляд это не совсем кошерно:
// Второй DataGrid ...
WorkingBooksSet это ObservableCollection во ViewModel'e @VladD, я, кажется, не понимаю чего-то фундаментального. Если пользоваться Вашим способ привязки ItemsSource={Binding WorkingBooksSet/Publications}, то я не получу именно выделенную строку в первом DataGrid. Надеюсь, Вы меня поняли. Мой способ мне не нравится тем, что если я изменю имя свойства в модели, то оно не изменится во View, так как у меня привязка: ItemSource={Binding ElementName=BooksGrid,Path=SelectedItem.Publications} а SelectedItem имеет тип object, то есть привязанное поле (ISBN, например, в моем случае) найдется только во время выполнения. Разобрался. @VladD, спасибо за помощь и за табличку!


Ответ

А что именно вам не нравится в вашем коде? Я бы правда забиндился как-нибудь так: ItemsSource={Binding WorkingBooksSet/Publications} (но это наверное вкусовщина). Вот вам шпаргалка по binding'ам: http://www.nbdtech.com/Free/WpfBinding.pdf Проблема, о которой вы говорите — фундаментальная для WPF. В XAML указывается лишь имя свойства, которое не связано с настоящим типом, и проверяется только на этапе выполнения, а не компиляции. Так было сделано, насколько я понимаю, чтобы избежать зависимости View от нижележащих уровней (VM и модели). Так что исправить её, по идее, невозможно, надо внимательно следить за переименованиями и ошибками binding'а на консоли. Такие дела.

Комментариев нет:

Отправить комментарий