2012-01-12 112 views
2

这可能是一个愚蠢的问题,或者我搜索了错误的单词:
我有一个组合框,并希望使用自定义转换器显示双打(显示等效分数)。
在DataTemplate中,我必须指定一个DataType,它是Double,但我不知道如何规定它。我确信有一个简单的方法来做到这一点!用数据模板绑定系统数据类型

把系统的命名空间中的窗口不编译

<Window ... xmlns:sys="clr-namespace:System" ...> 

的数据类型,只需键入双人或System.Double确实没有。

而定义一个简单的Double-Type的ViewModel也不是解决方案,可以吗?!

这是我到目前为止的代码:

<ComboBox ItemsSource="{Binding Gains}" SelectedItem="{Binding Gain, Mode=TwoWay}"> 
    <ComboBox.Resources> 
     <DataTemplate DataType=" ??????? fract"> 
      <TextBlock Text="{Binding ., Converter=fractConverter}"/> 
     </DataTemplate> 
    </ComboBox.Resources> 
</ComboBox> 

完整的解决方案:

使用系统命名空间SYS:作品!
收益是一个List <双>
增益是双

<Window ... xmlns:sys="clr-namespace:System;assembly=mscorlib" ...> 

组合框的工作原理是这样的:

<ComboBox ItemsSource="{Binding Gains}" SelectedItem="{Binding Gain, Mode=TwoWay}"> 
    <ComboBox.Resources> 
     <DataTemplate DataType="{x:Type sys:Double}"> 
      <TextBlock Text="{Binding ., Converter={StaticResource realConverter}}"/> 
     </DataTemplate> 
    </ComboBox.Resources> 
</ComboBox> 

回答

2

像这样:

<DataTemplate DataType="{x:Type sys:Double}"> 
+0

'sys'别名必须作为特殊xmlns添加,因为默认情况下它不会被添加。 – 2012-01-12 14:17:12

+0

hm,当我将'; assembly = mscorlib'添加到它至少编译的名称空间定义时...但即使它包含一个说明'lala'的Textblock,数据模式仍然不起作用。它仍然使用ToString方法来显示数字。 – JCH2k 2012-01-12 15:13:47

+0

谢谢,现在工作!我傻傻的键入x:Type! – JCH2k 2012-01-12 15:27:43

0

您不必指定数据模板 - 仅用于拾取数据类型特定(隐式)模板:)只需省略DataType。

看一看这个:http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase.stringformat.aspx

,因为它看起来相当接近,你在做什么。

+0

这是我第一次尝试,但我认为它不够强大。我想要显示数字<1作为分数,例如对于0.005 – JCH2k 2012-01-12 15:15:06

+0

1/200然后转换为要走的路。 – 2012-01-12 15:35:53