【发布时间】:2012-03-24 16:28:55
【问题描述】:
WPF/MVVM 的新手。我有一个“MyData”类型的数据对象。它的属性之一是“MySubsetData”类型。
我在数据网格中显示“MyData”对象的集合。
<DataGrid ItemsSource="{Binding Path=MyDataCollection}">
<!-- Each row of the datagrid contains an item of type "MyData" -->
<DataGrid.Columns .../>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<local:MySubsetDataUserControl/>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
行详细信息应显示“MySubsetData”的内容。行详细信息的视图位于单独的用户控件中(此处:“MySubsetDataUserControl”)。
目前我没有为“MySubsetDataUserControl”设置视图模型,所以它从父数据网格行继承数据上下文。
<UserControl>
<!-- Namespace stuff not shown for simplicity -->
<Grid DataContext="{Binding Path=MySubsetData}">
<!-- Show the MySubsetData properties here -->
<!-- e.g. a textbox -->
<TextBox Text="{Binding Path=TextData, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</UserControl>
虽然这行得通,但我在使用这种方法时遇到了几个问题:
所有业务逻辑都将在用户控件父视图模型中,它根本不属于那里。使视图模型比它需要的更混乱。更不用说用户控件 xaml 中的命令绑定看起来也很丑陋。就是感觉不对。
由于可以同时看到更多行详细信息,我无法将“MySubsetData”的属性绑定到视图模型中的可观察属性。 IE。如果我更改代码中的属性(例如 TextData),则更改不会反映在视图中。我的解决方法是不更改属性“TextData”。相反,我更改了文本框 Text 属性的内容,这反过来又会更新“TextData”属性。这感觉很不对劲!
所以我想为我的用户控件使用另一个视图模型,但我不知道如何访问我的数据。
<UserControl.DataContext>
<local:UserControlViewModel/>
</UserControl.DataContext>
我现在如何访问“MySubsetData”?
【问题讨论】:
标签: wpf mvvm user-controls viewmodel