我有一个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. '\\PrinterServer\My Printer')
}
ComboBox看起来像:
<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
1}}未在我的ComboBox中应用。
有没有办法将提供的SelectedValue
与ItemSource
中的项目进行比较并忽略大小写?
答案 0 :(得分:1)
您可以让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" />