2012-01-12 104 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