sto vincolante la raccolta PageMediaSize
di un PrintQueue
alla ItemSource
di un ComboBox
(Questo funziona bene). Quindi collego lo SelectedItem
dello ComboBox
allo DefaultPrintTicket.PageMediaSize
dello PrintQueue
. Mentre questo imposterà il valore selezionato su DefaultPrintTicket.PageMediaSize
bene, non imposta il valore inizialmente selezionato di ComboBox
sul valore iniziale di DefaultPrintTicket.PageMediaSize
Questo perché il riferimento DefaultPrintTicket.PageMediaSize
non corrisponde a nessuno dei riferimenti nella raccolta. Tuttavia, non voglio che confronti gli oggetti per riferimento, ma invece per valore, ma PageMediaSize
non esegue l'override di Equals (e non ho alcun controllo su di esso). Quello che mi piacerebbe davvero fare è impostare un IComparable
per il ComboBox
da usare, ma non vedo alcun modo per farlo. Ho provato a utilizzare uno Converter
, ma avrei bisogno di più del valore e non sono riuscito a capire come passare la raccolta allo ConverterProperty
. Qualche idea su come gestire questo problema.WPF vincolante per ComboBox SelectedItem quando riferimento non in ItemsSource
Ecco la mia 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"/>
E il codice per il convertitore che ottiene la raccolta 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();
}
}
Modifica
ho provato a fissare il DefaultPrintTicket.PageMediaSize
al corrispondente riferimento nel raccolta prima dello InitializeComponent
, ma non era un problema K. Definisce senz'altro il valore quando seleziono qualcosa dallo ComboBox
, ma non sembra andare nella direzione opposta.