WPF MVVM中GridView内的文本框

时间:2014-01-18 06:26:29

标签: c# asp.net wpf gridview mvvm

如何将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");
        }
    }

任何人都请帮忙。

2 个答案:

答案 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”命令。

要向特定商品添加数量,您需要执行以下步骤:

  1. 通过单击其行来选择ListBox中的项目 - 这将在viewmodel中设置“SelectedItem”属性
  2. 在TextBox中输入金额 - 这将在您的viewmodel中设置“Quantity”属性
  3. 按“添加数量”按钮 - 这将在视图模型中调用“AddQuantity”命令,该命令应取“Qantity”属性中的值并将该值添加到SelectedItem.Quantity。
  4. [根据以下评论进行编辑]

    您可以在GridView的每一行上使用TextBox和“AddQuantity”按钮。

    首先,您需要将此“Quantity”属性移动到实现每个项目的类。我可能会将其重命名为“QuantityToAdd”或类似的内容,以避免与项目类中已存在的数量混淆。
    您还需要在里面移动“AddQuantity”命令。通过这种方式,您始终可以在“Qantity”(或重命名的“QuantityToAdd”)中添加该特定项目的值,并且ListView中可能不需要SelectedItem="{Binding Path=SelectedItem}"。 可能有更优雅的解决方案,但这就是现在想到的。