Я связываю PageMediaSize
коллекцию PrintQueue
с ItemSource
из ComboBox
(это прекрасно работает). Затем я связываю SelectedItem
ComboBox
с DefaultPrintTicket.PageMediaSize
PrintQueue
. Несмотря на то, что это установит выбранное значение на DefaultPrintTicket.PageMediaSize
просто отлично, оно не установит первоначально выбранное значение ComboBox
на начальное значение DefaultPrintTicket.PageMediaSize
Это потому, что ссылка DefaultPrintTicket.PageMediaSize
не соответствует ни одной из ссылок в коллекции. Однако я не хочу сравнивать объекты по ссылке, а по значению, но PageMediaSize
не переопределяет Equals (и я не могу это контролировать). Что я действительно хотел бы сделать, так это настроить IComparable
для использования ComboBox
, но я не вижу никакого способа сделать это. Я пытался использовать Converter
, но мне нужно больше, чем значение, и я не мог понять, как передать коллекцию в ConverterProperty
. Любые идеи о том, как справиться с этой проблемой.
Вот мой xaml
<ComboBox x:Name="PaperSizeComboBox"
ItemsSource="{Binding ElementName=PrintersComboBox, Path=SelectedItem,
Converter={StaticResource printQueueToPageSizesConverter}}"
SelectedItem="{Binding ElementName=PrintersComboBox,
Path=SelectedItem.DefaultPrintTicket.PageMediaSize}"
DisplayMemberPath="PageMediaSizeName"
Height="22"
Margin="120,76,15,0"
VerticalAlignment="Top"/>
И код для конвертера, который получает коллекцию PageMediaSize
public class PrintQueueToPageSizesConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
return value == null ? null :
((PrintQueue)value).GetPrintCapabilities().PageMediaSizeCapability;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Редактировать
Я пытался установить DefaultPrintTicket.PageMediaSize
на соответствующую ссылку в коллекции до InitializeComponent
, но это не сработало. Это определенно устанавливает значение, когда я выбираю что-то из ComboBox
, но, похоже, оно не идет другим путем.