正在做一个打印机列表,从中选择一个打印机(System.Printing)
<ComboBox Width="150" ItemsSource="{Binding PrintQueues}" SelectedItem="{Binding Model.CurrentPrintQueue}" DisplayMemberPath="Name"> </ComboBox>
var printServer = new LocalPrintServer(); PrintQueues = printServer.GetPrintQueues(); Model.CurrentPrintQueue = printServer.DefaultPrintQueue;
都觉得这样是没有问题的对不对,可是,实际运行起来 SelectedItem就是绑定不上,找了一大堆网站,都说ComboBox的一个Bug,换SelectedIndex,SelectedValue等方法,我想这不科学,这么优秀的控件,这么简洁的Binding,不可能有Bug的呀。
解决方法:
首先想SelectedItem肯定是来自于ItemsSource中的一个引用,并且他们是同一个对象才行。
但是看代码,我以为printServer.DefaultPrintQueue就是GetPrintQueues()中的一个对象,好嘛,这样写
Model.CurrentPrintQueue = PrintQueues.FirstOrDefault(x => x.Name == printServer.DefaultPrintQueue.Name);
居然绑定上了!
所以以后一定要记住了,SelectedItem必须是ItemsSource中的同一个对象才行,被PrintServer坑了