所以我为DataGrid启用了一个右键单击选项。我想只显示选定项目的一个属性,但它的行为并不像我想要的那样。它显示我的命名空间和额外的。
public class Paymentinfo
{
public int PaymentNo { get; set; }
public String Date { get; set; }
public double Payment { get; set; }
public double Principle { get; set; }
public double Interest { get; set; }
public double Balance { get; set; }
}
private void MenuItem_OnClick(object sender, RoutedEventArgs e)
{
MessageBox.Show(AmortGrid.SelectedItem.ToString());
}
我试图在不使用viewmodel的情况下实现它!如果我在Messagebox中放置一个断点并将光标放在selectedItem上,那么它将显示属性paymentNo-date-payment-principle-interest-balance。我需要的唯一价值是PaymentNo
希望它会像这样
MessageBox.Show(AmortGrid.SelectedItem.PaymentNo.ToString());
答案 0 :(得分:3)
当你像这样打电话给ToString()
时,你会得到班级类型的名称,这就是你所看到的。
如果这是Paymentinfo
的集合,请首先将SelectedItem
强制转换回该类型:
MessageBox.Show(((Paymentinfo)AmortGrid.SelectedItem).PaymentNo.ToString());
FWIW,我会重新考虑ViewModel
。如果从代码隐藏中获取代码,则更容易测试代码。
您可以将SelectedItem
直接绑定到ViewModel
中的某个属性(可能称为SelectedPaymentinfo),然后就不会乱码了。
答案 1 :(得分:2)
您也可以设置SelectedValuePath,而不是使用SelectedItem使用SelectedValue。
答案 2 :(得分:2)
在PaymentInfo上创建一个ToString()方法。
public class Paymentinfo
{
public override string ToString()
{
return PaymentNo.ToString();
}
}