Без нарушения MVVM существует ли способ показать некоторые свойства дочернего элемента управления в пользовательском элементе управления, чтобы окно или другой пользовательский элемент управления, который использует его, могли получить доступ к этим свойствам напрямую?Выводить дочерние свойства пользовательского элемента управления непосредственно как свойство пользовательского элемента управления
Например, у меня есть пользовательский элемент управления, который имеет listview, настроенный с помощью gridviewcolumns, заголовков и привязан к модели представления. Но в представлении списка в элементе управления пользователя были выбраны свойства элемента и такие, что я хотел бы выставить на хост без необходимости делать что-то вроде usercontrol.customListView.property. Или так я должен это делать? Я бы хотел просто запустить usercontrol.property, не указав customListView. Perhap Мне нужно просто создать свойства в коде управления пользователя, за которым возвращаются свойства управления списком, которые я хочу привязать непосредственно к пользовательскому элементу управления?
Я чувствую, что этот последний вариант действительно не нарушает MVVM, поскольку они выставлены для хоста, чтобы взаимодействовать с ним, а не действительно касались самого представления. Любые предлагаемые оценки будут оценены.
EDIT: На самом деле, я бы очень хотел иметь свойство SelectedItem непосредственно на пользовательский элемент управления, который не ListViewItem или объект, но на самом деле от типа данных содержал, что лань, как:
public MyDataType SelectedItem {
get {
return customListView.SelectedItem as MyDataType;
}
}
бы, допустимо в MVVM? Поскольку я не вижу, как это возможно в ViewModel, похоже, что это должно быть в частичном коде класса.
Просто добавьте DepandencyProperty на свой контроль и привяжите его/переустановите его ('Binding RelativeSource {FindAncestor}') на дочернем элементе управления (btw и, возможно, OT, .columns на WPF datagrid не могут быть связаны). Cant видит какие-либо проблемы с MVVM - скажем, ComboBox использует другие элементы управления, и у вас нет проблем с его использованием в MVVM :) –
Этот вопрос не имеет ничего общего с MVVM. – Sheridan
«У меня есть пользовательский элемент управления, который имеет список, настроенный с помощью gridviewcolumns, headers ** и привязан к модели представления. **« Да, вот почему у вас проблемы. У вас не должно быть ЛЮБЫХ ViewModels внутри вашего UserControl. Вы должны выставлять свойства на поверхности для всего, что вам нужно, а затем привязывать дочерние элементы UC к этим свойствам. Если вам нужно выполнить логику пользовательского интерфейса в своем UC, используйте код. Не создавайте виртуальную машину, предназначенную для использования внутри UC. Имеет ли TextBox TextBoxViewModel? Нет. Относитесь к своему UC как к Control, а не к подмножеству логики. – Will