无法从列表视图中的文本框中获取文本

时间:2013-08-08 18:06:00

标签: c# wpf listview binding textbox

XAML代码:

<ListView.View>
    <GridView x:Name="myGridView">
        <GridViewColumn Width="0" DisplayMemberBinding="{Binding Id}">
            <GridViewColumnHeader Content="Id" IsHitTestVisible="False" />
        </GridViewColumn>
        <GridViewColumn Width="50" Header="Cant">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <TextBox FontSize="11" />
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
        <GridViewColumn Width="300" Header="Nombre" DisplayMemberBinding="{Binding Nombre}" />
    </GridView>
</ListView.View>

使用另一个listview中的项填充myListView的C#代码:

private void myListView_Drop(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent("myFormat"))
    {
        foreach (var item in e.Data.GetData("myFormat") as Dictionary<string, string>)
        {
            var itemC = new {Id = item.Key, Cant = "", Nombre = item.Value};
            myListView.Items.Add(itemC);
            myListView.SelectedItem = itemC;
        }
    }
}

从myListView中检索项目的C#代码:

private Dictionary<string, string> GenerateArts()
{
    var arts = new Dictionary<string, string>();
    dynamic result = myListView.Items;

    foreach (var item in result)
       arts.Add((string) item.Id, (string) item.Cant);

    return arts;
}

填充myListView后,用户可以在“Cant”列的每个文本框中写入数字,但稍后,当单击按钮并调用GenerateArts()时,这些数字将丢失,即item.Cant为“”(空每个项目的字符串。

有什么问题?

编辑:

当调用GenerateArts()时,item.Id和item.Nombre的值按预期存在。问题在于item.Cant。

2 个答案:

答案 0 :(得分:1)

Cant绑定到TextBox.Text属性,如下所示。

XAML:

            <GridViewColumn Width="50" Header="Cant">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox FontSize="11" Text="{Binding Cant}" MinWidth="30"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>

代码背后的变化:

var itemC = new MyData() { Id = item.Key, Cant = "", Nombre = item.Value };

MyData class

public class MyData
{
    public string Id { get; set; }
    public string Cant { get; set; }
    public string Nombre { get; set; }
}

答案 1 :(得分:-1)

您是否在page_load事件中使用if(!IsPostBack)?也许你再次绑定数据?