我綁定PrintQueue
ItemSource
ComboBox
(這工作正常)的PageMediaSize
集合。然後我將ComboBox
的SelectedItem
綁定到PrintQueue
的DefaultPrintTicket.PageMediaSize
。雖然這會將所選值設置爲DefaultPrintTicket.PageMediaSize
,但它並未將ComboBox
的初始值設置爲初始值DefaultPrintTicket.PageMediaSize
這是因爲DefaultPrintTicket.PageMediaSize
引用與集合中的任何引用都不匹配。不過,我不希望它通過引用比較對象,而是通過值來比較,但PageMediaSize
不會覆蓋等於(並且我無法控制它)。我真的很想爲ComboBox
設置一個IComparable
來使用,但我沒有看到任何方式來做到這一點。我嘗試過使用Converter
,但我需要的不僅僅是價值,而且我也不知道如何將收集傳遞給ConverterProperty
。關於如何處理這個問題的任何想法。WPF綁定到組合框SelectedItem當參考不在ItemsSource
這裏是我的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
中選擇一些內容時,它肯定會設置這個值,但它似乎沒有反過來。