POSSalesViewModel
中的父视图模型命令方法
我知道我可能已经用下面的代码打破了mvvm的概念,但我是新手,并且对此有任何改进。
private void AddProduct(ProductDTO productDTO)
{
var ctx = (POSSalesDetailsViewModel)((POSSalesDetailsView)TabItems[_selectedTabIndex].Content).DataContext;
ctx.ProductLines.Add(new ProductLine()
{
Product = productDTO.Description,
Quantity = 1,
ProductTradeChannelId = productDTO.ProductTradeChannelId,
Amount = productDTO.Amount
});
}
子视图模型POSSalesDetailsViewModel
已达到集合,但视图未更新
public ObservableCollection<ProductLine> ProductLines
{
get => _productLines;
set { Set(ref _productLines, value); }
}
这里是绑定到集合的子视图
<DataGrid x:Name="ProductTypesDataGrid" ItemsSource="{Binding ProductLines, Mode=TwoWay}"
AutoGenerateColumns="False" CanUserSortColumns="True" CanUserAddRows="False">
<DataGrid.Columns>
<materialDesign:MaterialDataGridTextColumn IsReadOnly="True" Binding="{Binding Product, Mode=TwoWay}"
Header="Product" Width="Auto" />
<materialDesign:MaterialDataGridTextColumn IsReadOnly="True"
Binding="{Binding Quantity, Mode=TwoWay}"
Header="Quantity" Width="Auto" />
<materialDesign:MaterialDataGridTextColumn IsReadOnly="True"
Binding="{Binding Amount, Mode=TwoWay}"
Header="Price" Width="Auto" />
<DataGridTemplateColumn Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete"
Command="{Binding DataContext.DeleteCommand,
RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
注意
正在构造函数中创建子视图模型实例,以便每次都获取一个新实例(而不是mvvmlight方式)
public POSSalesDetailsView()
{
InitializeComponent();
this.DataContext = new POSSalesDetailsViewModel();
}
答案 0 :(得分:1)
在调试我的问题后,我想出了问题所在。
<TabControl Grid.Row="0" Grid.RowSpan="2" Grid.Column="1"
ItemsSource="{Binding TabItems}"
SelectedIndex="{Binding SelectedTabIndex}">
<TabControl.ItemTemplate>
<!-- this is the header template-->
<DataTemplate>
<TextBlock
Text="{Binding Header}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<!-- this is the body of the TabItem template-->
<DataTemplate>
<local:POSSalesDetailsView/>//**Problem is here**
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
问题是在父视图加载上创建了用户控件实例。因此,当我请求在选项卡项中添加新用户控件时,创建了一个新实例。而且数据没有出现。所以我将用户控件移到了这一部分。
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock
Text="{Binding Header}" />
<local:POSSalesDetailsView Grid.Row="1"/> // **Here**
</Grid>
</DataTemplate>
</TabControl.ItemTemplate>