Как я могу легко предоставить привязываемые свойства вложенных элементов управления из пользовательского элемента управления UserControl? - PullRequest
1 голос
/ 05 августа 2011

Мой первый вопрос здесь, в стеке. Простите за плохое объяснение заранее.

Я работаю над своим первым приложением MVVM (Silverlight). У меня есть пользовательский элемент управления, который содержит ListBox для отображения элементов навигации. Этот элемент управления находится на моей главной странице xaml. Я не знаю, нужно ли мне создавать модель составного представления (модель представления моей главной страницы) с моделью представления, особенно для настраиваемого элемента управления, в ней или есть какой-то способ повысить свойства ListBox, к которым мне нужно привязаться.

Через XAML я не знаю, как связать, скажем, свойство ItemsSource ListBox внутри пользовательского элемента управления с моей моделью просмотра главной страницы. По сути, я сейчас подвергаю сомнению свое дизайнерское решение, связанное с попыткой привязать пользовательский элемент управления через мою модель представления главной страницы.

На данный момент я создал свойства зависимостей для пользовательского элемента управления и попытался туннелировать эти свойства зависимостей до свойств ListBox. Я добился успеха с этим методом для ItemsSource, но у меня проблемы с SelectedItem.

Даже если я заставлю SelectedItem работать, он все равно будет чувствовать себя Неверно . Спасибо за любой совет заранее.

1 Ответ

1 голос
/ 05 августа 2011

UserControl должен наследовать DataContext от родительского элемента управления, если вы не устанавливаете его напрямую. Затем вы можете привязать свойства вашей модели представления из вашего UserControl.

Если вы хотите создать ViewModel специально для UserControl, вы также можете это сделать. Затем вы выставите его как свойство на своем основном ViewModel и привяжете к нему на главной странице. Пример:

public class MainViewModel
{
    public ChildViewModel ChildInfo { get; private set; }
}

А потом в представлении:

<Grid>
    ...
    <lcl:ChildView DataContext="{Binding ChildInfo}" />
    ...
</Grid>

Ваш ChildViewModel будет содержать свойства, такие как SelectedItem, для привязки вашего ListBox к.

...