C# Can';无法从列表视图中的文本框中获取文本
XAML代码: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
<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; }
}