【发布时间】:2011-02-27 11:43:11
【问题描述】:
我将PrintQueue 的PageMediaSize 集合绑定到ComboBox 的ItemSource(这工作正常)。然后我将ComboBox 的SelectedItem 绑定到PrintQueue 的DefaultPrintTicket.PageMediaSize。虽然这会将选定的值设置为DefaultPrintTicket.PageMediaSize,但它不会将ComboBox 的初始选定值设置为DefaultPrintTicket.PageMediaSize 的初始值,这是因为DefaultPrintTicket.PageMediaSize 引用与任何引用都不匹配在集合中。但是我不希望它按引用比较对象,而是按值比较对象,但PageMediaSize 不会覆盖 Equals(我无法控制它)。我真正想做的是设置一个IComparable 供ComboBox 使用,但我看不到任何方法可以做到这一点。我尝试使用Converter,但我需要的不仅仅是价值,而且我不知道如何将集合传递给ConverterProperty。关于如何处理这个问题的任何想法。
这是我的 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 中选择某些内容时,它肯定会设置值,但它似乎并没有相反。
【问题讨论】: