Jestem wiązania PageMediaSize
kolekcję o PrintQueue
do ItemSource
z ComboBox
WPF (Działa to dobrze). Następnie wiążę SelectedItem
z ComboBox
z . Chociaż ustawi ona wybraną wartość na odpowiednią wartość, nie ustawia początkowo wybranej wartości ComboBox
na wartość początkową DefaultPrintTicket.PageMediaSize
Wynika to z faktu, że odwołanie DefaultPrintTicket.PageMediaSize
nie pasuje do żadnego odwołania w kolekcji. Jednak nie chcę, aby porównywał obiekty przez odniesienie, ale zamiast wartości, ale PageMediaSize
nie zastępuje równych (i nie mam nad nim kontroli). To, co naprawdę chciałbym zrobić, to skonfigurować IComparable
do użycia, ale nie widzę żadnego sposobu, aby to zrobić. Próbowałem użyć Converter
, ale potrzebowałbym więcej niż wartość i nie mogłem wymyślić, jak przekazać kolekcję do ConverterProperty
. Wszelkie pomysły dotyczące rozwiązania tego problemu.wiązanie z ComboBox selectedItem gdy odniesienie nie ItemsSource
Oto mój 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"/>
I kod dla konwertera, który dostaje kolekcji 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();
}
}
Edycja
Próbowałem ustawienie DefaultPrintTicket.PageMediaSize
do odpowiedniego odniesienia w kolekcja przed InitializeComponent
, ale to nie przeszkadzało k. To definately ustawienie wartości, gdy wybiorę coś z ComboBox
, ale nie wydaje się, aby przejść w drugą stronę.