Tôi đang ràng buộc bộ sưu tập PageMediaSize
của PrintQueue
vào ItemSource
của một ComboBox
(Điều này làm việc tốt). Sau đó, tôi ràng buộc số SelectedItem
của số ComboBox
vào số DefaultPrintTicket.PageMediaSize
của số PrintQueue
. Trong khi điều này sẽ đặt giá trị đã chọn thành DefaultPrintTicket.PageMediaSize
tốt, nó không đặt giá trị được chọn ban đầu là ComboBox
thành giá trị ban đầu là DefaultPrintTicket.PageMediaSize
Điều này là do tham chiếu DefaultPrintTicket.PageMediaSize
không khớp với bất kỳ tham chiếu nào trong bộ sưu tập. Tuy nhiên tôi không muốn nó so sánh các đối tượng bằng cách tham chiếu, nhưng thay vì bằng giá trị, nhưng PageMediaSize
không ghi đè bằng (và tôi không kiểm soát được nó). Những gì tôi thực sự muốn làm là thiết lập một IComparable
cho ComboBox
để sử dụng, nhưng tôi không thấy bất kỳ cách nào để làm điều đó. Tôi đã cố gắng sử dụng Converter
, nhưng tôi sẽ cần nhiều hơn giá trị và tôi không thể tìm ra cách chuyển bộ sưu tập đến số ConverterProperty
. Bất kỳ ý tưởng về cách xử lý vấn đề này.WPF ràng buộc với ComboBox SelectedItem khi tham chiếu không có trong ItemsSource
Dưới đây là XAML của tôi
<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"/>
Và mã cho bộ chuyển đổi mà được các PageMediaSize
bộ sưu tập
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();
}
}
Sửa
tôi đã cố gắng thiết lập các DefaultPrintTicket.PageMediaSize
để tham chiếu tương ứng trong bộ sưu tập trước InitializeComponent
, nhưng điều đó không k. Nó chắc chắn thiết lập giá trị khi tôi chọn một cái gì đó từ ComboBox
, nhưng nó dường như không đi theo cách khác.