I'm binding the PageMediaSize
collection of a PrintQueue
to the ItemSource
of a ComboBox
(This works fine). Then I'm binding the SelectedItem
of the ComboBox
to the DefaultPrintTicket.PageMediaSize
of the PrintQueue
. While this will set the selected value to the DefaultPrintTicket.PageMediaSize
just fine it does not set the initially selected value of the ComboBox
to the initial value of DefaultPrintTicket.PageMediaSize
This is because the DefaultPrintTicket.PageMediaSize
reference does not match any of the references in the collection. However I don't want it to compare the objects by reference, but instead by value, but PageMediaSize
does not override Equals (and I have no control over it). What I'd really like to do is setup a IComparable
for the ComboBox
to use, but I don't see any way to do that. I've tried to use a Converter
, but I would need more than the value and I couldn't figured out how to pass the collection to the ConverterProperty
. Any ideas on how to handle this problem.
Here's my 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"/>
And the code for the converter that gets the PageMediaSize
collection
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();
}
}
Edit
I tried setting the DefaultPrintTicket.PageMediaSize
to the corresponding reference in the collection before InitializeComponent
, but that did not work. It's definately setting the value when I select something from the ComboBox
, but it doesn't seem to go the other way.