WPF binding to ComboBox SelectedItem when reference not in ItemsSource.
Posted
by juharr
on Stack Overflow
See other posts from Stack Overflow
or by juharr
Published on 2010-06-03T19:30:10Z
Indexed on
2010/06/03
19:34 UTC
Read the original article
Hit count: 705
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();
}
}
© Stack Overflow or respective owner