我有一个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" />
其中Printers
是ObservableCollection<PrinterViewModel>
属性,Printer
是应由Id
填充的字符串属性。
例如,如果Printer
的预定义值为"\printerserver\my Printer",但已安装打印机的列表包含"\printerserver\MyPrinter"。由于大小写不同,这些打印机不匹配,并且SelectedValue
未应用于我的组合框中。
有没有办法将提供的SelectedValue
与ItemSource
中的项目进行比较并忽略大小写?
您可以让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" />