2012-01-05 85 views
0

我试图将转换器参数设置为ItemTemplate内部项目的属性。 由于ConverterParameter不是依赖项属性绑定不起作用。
但我真的不需要绑定,只需设置一次就足够了,因为它永远不会改变。ConverterParameter:在ItemTemplate中设置它

<ItemsControl ItemsSource="ItemsWithTypeProperty"> 
<ItemsControl.ItemTemplate> 
    <DataTemplate> 
    <RadioButton IsChecked="{Binding SelectedItem.Base.Type, Converter={l:IsEqualConverter}, Mode=TwoWay, ConverterParameter={Type}}" /> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 
</ItemsControl> 

IsEqualConverter:
转换:该值进行比较,该参数,并返回结果
ConvertBack:如果该值是真则返回参数

ItemTemplate中的DataContext的是包含类名称为“Type”的Property。
它的类型是对象。

有没有一种方法可以将{Type}替换为仅将其设置为(DataContext。)的类型?如果是的话如何?

回答

1

我不知道究竟是什么类型。它是对象的System.Type吗?它总是一个固定的类型?你可以写类似:

ConverterParameter={x:Type local:TypeToCompare} 

如果类型不是恒定的,你可以重新写你的转换器来实现IMultiValueConverter并使用MultiBinding

+0

否类型不恒定。这种情况下的类型意味着具有DataContext对象的名称“Type”的Property。多重绑定也是我的第一个想法,但问题是我无法将其转换回来。 ConvertBack只提供一个布尔值,并不足以将其转换回我需要的对象。 – Arokh 2012-01-05 17:05:51

+0

OK,在这种情况下,我会说要么回到绘图板或者如果你真的必须,你有可以使ConverterParameter绑定的黑客。请参阅http://marlongrech.wordpress.com/2008/08/03/my-wish-came-true-i-can-now-use-databinding-in-a-converterparameter/ – 2012-01-05 20:18:36

0

尝试使用此:

......, ConverterParameter=Type}" /> 

并在您的转换:

if ((string)parameter == "Type")) 
    { 
     //Do some stuff 
    } 
+0

这种情况下的类型应该是Datacontext对象的属性Type的值。 – Arokh 2012-01-05 17:01:00

相关问题