C# Can';无法从列表视图中的文本框中获取文本

C# Can';无法从列表视图中的文本框中获取文本,c#,wpf,listview,binding,textbox,C#,Wpf,Listview,Binding,Textbox,XAML代码: <ListView.View> <GridView x:Name="myGridView"> <GridViewColumn Width="0" DisplayMemberBinding="{Binding Id}"> <GridViewColumnHeader Content="Id" IsHitTestVisible="False" /> </GridView

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;
        }
    }
}
private void myListView\u Drop(对象发送方,DragEventArgs e)
{
if(例如Data.GetDataPresent(“myFormat”))
{
foreach(e.Data.GetData(“myFormat”)中的变量项作为字典)
{
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;
}
private Dictionary GenerateArts()
{
var arts=新字典();
动态结果=myListView.Items;
foreach(结果中的var项目)
艺术添加((字符串)item.Id,(字符串)item.Cant);
回归艺术;
}
填写myListView后,用户可以在“铁路超高”列的每个文本框中写入数字,但稍后单击按钮并调用GenerateArts()时,这些数字将丢失,即每个项目的铁路超高为“”(空字符串)

有什么问题吗

编辑:


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

是否在页面加载事件中使用if(!IsPostBack)?可能您又在绑定数据了?

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

XAML:

MyData类

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

谢谢马西亚诺。我不知道IsPostBack是什么,但我会马上研究。Marciano:这不是一个web应用程序,它是一个桌面应用程序。谢谢Anand。我以前试过,但是当其他listview中的项目被放到myListView上时,我(很多次)会遇到这样的异常:双向或单向ToSource绑定无法处理“f_AnonymousType2”3[System.String,System.String,System.String]类型的只读属性“Cant”。即使我只拖放了一个项目。正在运行你的代码,我也得到了异常。你不能定义类本身,而不是创建一个具有属性的匿名类吗?是的,我可以。我试试看,太好了!非常感谢。:)我不能因为我的名誉而放弃(这是我的第一个问题。)
var itemC = new MyData() { Id = item.Key, Cant = "", Nombre = item.Value };
public class MyData
{
    public string Id { get; set; }
    public string Cant { get; set; }
    public string Nombre { get; set; }
}