如何将WPF网格视图中的文本框绑定到视图模型中的属性?我正在使用MVVM模式。
<ListView Canvas.Left="135" Canvas.Top="185" Height="204" Name="listView1" ItemsSource="{Binding Path=lstSelectedStocks}" Width="436" >
<ListView.View>
<GridView>
<GridViewColumn Header="SI No." DisplayMemberBinding="{Binding Path=Index}" Width="80"></GridViewColumn>
<GridViewColumn Header="Item ID" DisplayMemberBinding="{Binding Path=Itemname.ItemId}" Width="80"></GridViewColumn>
<GridViewColumn Header="Item Name" DisplayMemberBinding="{Binding Path=Itemname.Name}" Width="120"></GridViewColumn>
<GridViewColumn Header="Quantity" Width="100">
<GridViewColumn.CellTemplate >
<DataTemplate>
<TextBox x:Name="txtQuantity" Width="100" Text="{Binding Path=Qantity, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Purchase Rate" Width="0" DisplayMemberBinding="{Binding Path=PurchasePrice}" ></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
Qantity是如下定义的属性:
public int Quantity;
public int Qantity
{
get
{
return Quantity;
}
set
{
Quantity = value;
OnPropertyChanged("Qantity");
}
}
任何人都请帮忙。
答案 0 :(得分:0)
您分配给Text属性的绑定路径很好。您只需要检查Quantity Property是您将gridview itemssource指定为集合的类的一部分。
答案 1 :(得分:0)
我不知道我是否理解正确(如果没有,请纠正我),但根据您的评论,我猜您想要为特定项目添加数量。
如果是这种情况,您的项目类仍需要有一个数量属性/字段来包含此值,但如果您不需要能够使用类似标签的内容,则可能需要显示该属性直接设置该数量。
您应该将此属性添加到xaml中的ListBox:
SelectedItem="{Binding Path=SelectedItem}"
对于您的viewmodel,您需要添加名为“SelectedItem”的属性,其类型与列表中的项目相同。
让我们在你的viewmodel中说:
public List<Product> lstSelectedStocks
{
// ...
}
这个新属性应该是:
public Product SelectedItem
{
// ...
}
现在在ListBox之外添加一个新的TextBox:
您的viewmodel中已经有“Qantity”属性,所以此处不再有工作。
还在TextBox旁边添加一个新按钮;
<Button Content="Add Quantity" Command="{Binding Path=AddQuantity}" />
您需要在viewmodel中实现“AddQuantity”命令。
要向特定商品添加数量,您需要执行以下步骤:
[根据以下评论进行编辑]
您可以在GridView的每一行上使用TextBox和“AddQuantity”按钮。
首先,您需要将此“Quantity”属性移动到实现每个项目的类。我可能会将其重命名为“QuantityToAdd”或类似的内容,以避免与项目类中已存在的数量混淆。
您还需要在里面移动“AddQuantity”命令。通过这种方式,您始终可以在“Qantity”(或重命名的“QuantityToAdd”)中添加该特定项目的值,并且ListView中可能不需要SelectedItem="{Binding Path=SelectedItem}"
。
可能有更优雅的解决方案,但这就是现在想到的。