SilverLight - MVVM привязывает свойство viewmodel к столбцу таблицы данных - PullRequest
2 голосов
/ 01 декабря 2009

В моем приложении SilverLight у меня есть свойство в моей ViewModel с именем 'vmProperty' и список с именем 'dgSource'.

Я связываю свой dgSource с сеткой данных как ItemsSource, после чего текст данных каждой строки сетки данных изменяется на каждый элемент в dgSource. Один из столбцов, скажем, столбец флажка, должен быть привязан к vmProperty. Но поскольку ViewModel больше не является текстовым текстом строки, я не могу получить доступ к этому свойству.

Как мне обойти эту проблему? Если вопрос не ясен, пожалуйста, дайте мне знать, и я опубликую образец. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2009

Предполагая, что ваша ViewModel назначена в качестве DataContext LayoutRoot, это должно работать: -

IsChecked="{Binding DataContext.vmProperty, ElementName=LayoutRoot}"

Конечно, это не работает, в конечном итоге шаблон реплицируется, и, следовательно, «LayoutRoot» не существует в области имен, где фактически используется привязка.

Самое простое решение, так как это ViewModel, это изменить модель. Предоставьте требуемое значение для объектов, доступных в dgSource, или предоставьте свойство Parent, которое возвращается к ViewModel.

0 голосов
/ 01 декабря 2009

Попробуйте установить свойство галочки вашего столбца chechbox на следующее:

{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type YourViewClassName}}, Path=DataContext.vmProperty}

Это означает, что родительский элемент, тип которого является вашим типом представления, будет найден, а затем vmProperty его DataContext будет получен как значение.

UPDATE:

Это было решение для WPF.

Для серебряного света, я думаю, вы можете попробовать использовать конструкцию так:

{Binding Path=DataContext.vmProperty, ElementName=YourElement}

Где DataContext of YourElement является экземпляром вашей модели представления. Я думаю, что это может быть, например, сетка.

<Grid x:Name="YourElement" DataContext={Binding}>
<!-- DataGrid here -->
</Grid>
...