使用类型dynamic

时间:2015-09-01 01:53:41

标签: c# .net wpf dynamic

我有一个列表视图,当邮件进入时,此列表视图将会更新。

enter image description here

以下代码是关于我如何获得所选行的值。

private void CallTabLv_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{
  string callDetailValue = "";

  dynamic selectedCallDetail;

  //When a row of call detail is selected, return the selected row's value only
  if (LineBtn1.IsChecked == true)
  {
    selectedCallDetail = CallTabLv1.SelectedItem;
    callDetailValue = selectedCallDetail.Value;
  }

  if (LineBtn2.IsChecked == true)
  {
    selectedCallDetail = CallTabLv2.SelectedItem;
    callDetailValue = selectedCallDetail.Value;
  }

  if (string.IsNullOrEmpty(callDetailValue))
    callDetailValue = string.Empty;

  Clipboard.Clear();
  Clipboard.SetText(callDetailValue);
}

它适用于第一个消息,我可以获得所选行的值。问题是当第二条消息进来时,我的应用程序停止并返回“无法对空引用执行运行时绑定”。

顺便说一句,要返回单个选定行的值,应该使用哪一个:CallTabLv1.SelectedItem还是CallTabLv1.SelectedItems[0]?正如我所尝试的那样,如果使用后者,当第二条消息进入时,它将返回“ArgumentOutOfRange Exception”。

请帮忙。

更新 当消息进入时,我通过清除整个列表视图更新列表视图,然后逐行打印。我不确定它是否是由我更新listview的方式引起的。

1 个答案:

答案 0 :(得分:1)

所以这可能正在发生,因为您正在清除您现在已更改所选项目的集合。由于此时项目可以为null,因此动态对象将无法访问该属性" Value"

您正在检查是否选中了复选框,这不一定是所选项目是否存在的条件。我建议您的代码更新。

else if

您应该使用SelectedItem,因为SelectedItems集合可能为null或为空,如果您只想要一个结果,这通常是最好的。还要确保您的ListBox仅允许选择单个项目,以便用户不会通过使用SHIFT或CTRL单击选择多个项目来使代码崩溃