正在做一個打印機列表,從中選擇一個打印機(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坑了
