在WPF中,使用控件ComboBox Binding方式绑定SelectedItem时,绑定时可能会无效,下面提供一种解决方案

需求

比如要做一个打印机列表,从中选择一个打印机(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肯定是来自于ItemsSource中的一个引用,并且他们是同一个对象才行。 但是看代码,我以为printServer.DefaultPrintQueue就是GetPrintQueues()中的一个对象,所以代码后台修改为:

Model.CurrentPrintQueue = PrintQueues.FirstOrDefault(x => x.Name == printServer.DefaultPrintQueue.Name);

所以谨记,SelectedItem必须是ItemsSource中的同一个对象