2015-01-01 50 views
1

我試圖將DistanceRoundoffs列表的值加載到ComboBox中。值爲mm,但我想在cm中顯示它們,所以我需要使用值轉換器。如何在XAML中爲組合框定義值轉換器

我不知道如何以及在哪裏使用它。我應該在ItemsSource還是SelectedItem中定義它?

我不需要代碼轉換器的代碼;只需在XAML中實現當前的組合框。

<ComboBox ItemsSource="{Binding Path=DistanceRoundoffs}" 
      SelectedItem="{Binding DistanceRoundoff, 
        RelativeSource={RelativeSource FindAncestor, AncestorType=Window}, 
        Mode=TwoWay}"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock> 
        <TextBlock.Text> 
         <MultiBinding Converter="{StaticResource MultiUnitConverter}" ConverterParameter="{x:Static enumerations:Quantity.Length}"> 
          <Binding Path="RebarsVerticalDistanceRoundoff"/> 
          <Binding Path="CurrentTargetUnit"/> 
         </MultiBinding> 
        </TextBlock.Text> 
       </TextBlock> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
</ComboBox> 

private List<double> distanceRoundoffs = new List<double> {25, 50}; 
public List<double> DistanceRoundoffs 
{ 
    get { return distanceRoundoffs; } 
    set 
    { 
     distanceRoundoffs = value; 
     RaisePropertyChanged("DistanceRoundoffs"); 
    } 
} 

private double distanceRoundoff; 
public double DistanceRoundoff 
{ 
    get { return distanceRoundoff; } 
    private set 
    { 
     distanceRoundoff= value; 
     RaisePropertyChanged("DistanceRoundoff"); 
    } 
} 
+0

,做你讀的教程?這不是一個編碼服務,如果你需要編碼,聘請一個開發人員。如果你想學習,閱讀教程,*嘗試*並帶着一個特定的問題來到這裏。 「請爲我編碼」不是問題。 – nvoigt

+0

@nvoigt是的,我讀過教程。但是,無論您閱讀了多少個教程,都有時候卡住了。而且我沒有要求我剛纔詢問我應該使用轉換器的代碼。 – Vahid

回答

2

您應該使用在ComboBox的ItemTemplate轉換器:

<ComboBox ...> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Converter={StaticResource UnitConverter}}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 
+0

謝謝Clemens,實際上這是我最初使用的方法,但XAML在數據模板中使用時不會識別'RebarsVerticalDistanceRoundoff'。我更新了這個問題。 – Vahid

+0

現在我會猜這是什麼? – Clemens

+0

這適用於您的原始代碼@Vahid。 –