WPF 组合框在 ItemSource 中找不到 SelectedValue 由于不同的大小写



我有一个ComboBox,用于显示已安装打印机的列表。我的视图模型的Printer属性是用特定的打印机路径字符串预定义的,如下所述。但是,ComboBox最初并没有设置为预定义的值。这似乎是由于预定义的值与已安装打印机列表中的值不同。

我创建了一个PrinterViewModel类,它看起来像:

public class PrinterViewModel
{
    public string Name { get; set; } // Name of the printer (e.g. 'My Printer on PrinterServer')
    public string Id { get; set; } // Path of the printer (e.g. '\PrinterServerMy Printer')
}

组合框看起来像:

<ComboBox
    ItemsSource="{Binding Printers}"
    SelectedValue="{Binding Printer, Mode=TwoWay}"
    SelectedValuePath="Id"
    DisplayMemberPath="Name" />

其中PrintersObservableCollection<PrinterViewModel>属性,Printer是应由Id填充的字符串属性。

例如,如果Printer的预定义值为"\printerserver\my Printer",但已安装打印机的列表包含"\printerserver\MyPrinter"。由于大小写不同,这些打印机不匹配,并且SelectedValue未应用于我的组合框中。

有没有办法将提供的SelectedValueItemSource中的项目进行比较并忽略大小写?

您可以让Printer属性始终保持小写Id,然后在SelectedValue绑定中使用转换器:

// Don't forget to add support for INotifyPropertyChanged
private string printer;
public string Printer
{
    get { return printer; }
    set { printer = value == null ? null : value.ToLower(); }
}
<ComboBox ItemsSource="{Binding Printers}"
          SelectedValue="{Binding Printer, Mode=TwoWay, Converter={local:ToLowerConverter}}"
          SelectedValuePath="Id"
          DisplayMemberPath="Name" />

相关内容

最新更新