我有一个有很多行的wpf数据网格,每一行都有一些特定的行为,比如列1组合的选择更改将过滤列2组合,并且在行1中选择的列1组合不能在行2列1组合中选择,等等...
因此,我正在考虑为主数据网格创建一个视图模型,并为每一行创建另一个视图模型。
这是一个好的MVVM实现吗?这样我就可以有效地处理每一行的更改事件。
问题是,如何将“每行”创建为用户控件视图?在数据网格中。
我想实现这样的东西:
<TreeView
Padding="0,4,12,0">
<controls:CommandTreeViewItem
Header="Sales Orders"
Command="{Binding SelectViewModelCommand}"
CommandParameter="Sales Orders"/>
</TreeView> 我想要一个datagrid而不是TreeView,而不是controls:CommandTreeViewItem是WPF中的datagrid行。
提前谢谢。
发布于 2010-05-18 18:15:47
<my:DataGrid x:Name="locationGrid">
<my:DataGrid.Columns>
<my:DataGridTemplateColumn>
<my:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=LocationName}"/>
</DataTemplate>
</my:DataGridTemplateColumn.CellTemplate>
<my:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=LocationName}"/>
</DataTemplate>
</my:DataGridTemplateColumn.CellEditingTemplate>
</my:DataGridTemplateColumn>
</my:DataGrid.Columns>
</my:DataGrid> 您几乎可以在每个DataGrid列中放置任何您想要的内容。我在这里给你举了个例子。您可以定义偶数表头模板。如果你做小程序是不需要MVVM的,但是我不太理解你为什么你需要MV的DataGridRow?创建UserControl并将其嵌入到DataTemplate中,对于UserControl则创建VM类。
发布于 2010-05-18 15:32:36
您可以为每一行使用DataTemplate,并根据需要对其进行自定义。
发布于 2011-10-25 08:30:24
只需在视图的viewModel上的公共属性中创建视图模型类的可观察集合。下面是一个例子
public ObservableCollection<YourViewModelForEachRow> LineItems{ get; private set; }然后,在您的视图中,datagrid xaml会将ItemsSource属性设置为您在上面创建的LineItems属性。
ItemSource="{Binding LineItems"}当然,这假设包含DataGrid的视图的DataContext已设置为创建LineItems的ViewModel。我这样做是为了我的观点。我仍然认为自己是WPF的新手,但这似乎是一种非常干净和灵活的MVVM方法。处理每一行上的数据输入、小部件处理等的所有逻辑都由行视图模型负责。
另外,您的xaml非常干净。我的典型列定义如下所示(其中LineItemNumber是我的LineItemViewModel上的公共属性):
<DataGridTextColumn Binding="{Binding Path=LineItemNumber, StringFormat=000}"
ElementStyle="{StaticResource CellRightAlign}"
Header="Line No." />https://stackoverflow.com/questions/2854868
复制相似问题