2012-02-20 7 views
1

数値が表示されたら、わかりやすい文字列形式に変換したいと思っています。私はすでにFlightLevelConverterと呼ばれるIValueConverterを持っています。これは通常のTextBlockのUI項目に対してこれを行うために使用しています。Silverlightでコンバーターを使用したコンボボックスにバインドする

私は今、高度な選択肢のComboBoxにコンバータを適用したいが、私はそれが仕事を得ることができません。これは、非変換の数値ではなく、素敵な文字列値を表示する

<UserControl.Resources> 
    <status:FlightLevelConverter x:Key="FlightLevelConverter"/> 
</UserControl.Resources> 
... 
<ComboBox x:Name="AltitudeCombo" Grid.Row="0" Grid.Column="3" Width="100"> 
    <ComboBox.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding Converter={StaticResource FlightLevelConverter}}"/> 
    </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

これは私がComboBoxのために使用していXAMLの関連する部分です。私はエラーもなく、コンバータにブレークポイントを設定するとヒットせず、コンバータが呼び出されないことが示されます。

私は全般的にインターネットをトロールしていますが、特に私が間違っていることを発見しようとすると、StackOverflowが役に立ちましたが、役に立たないものは見つかりませんでした。

なぜ私のコンバータが呼び出されていないのですか?私は間違って何をしていますか? ComboBox.IsEditable場合

+0

をあなたがアイテムを取り込む方法と一緒にあなたの全体のXAMLファイルを投稿してください。 – gaurawerma

答えて

3

あなたは、例えば、数値のコレクションにItemsSourceプロパティを設定する必要があります

List<double> values = new List<double>(); 
values.Add(2.1); 
values.Add(3.2); 
values.Add(4.3); 
values.Add(5.4); 
AltitudeCombo.ItemsSource = values; 

あなたはこの

AltitudeCombo.Items.Add(new ComboBoxItem() { Content = 1.4 }); 

ItemTemplateに、したがってそのコンバータとの結合が適用されませんようComboBoxItemsを追加した場合。

+0

Aha。これは問題のようです。あなたの2番目の例のように項目を追加しています。 ItemsSourceを設定しようとします。ありがとうございました。 –

+0

はい、そのトリックでした。再度、感謝します。 –

+0

ようこそ。バインドには[StringFormat](http://msdn.microsoft.com/en-us/library/Cc491086(v = v1).aspx)プロパティがあります。これにより、 )コンバータ。 – Clemens

-1

ComboBox.ItemTemplateは真==コンボボックスの主要部分には適用されません。これは、ドロップダウンリストのエントリに対してのみ機能します。 ComboBox.IsEditable == falseに設定してください。それは助けるかもしれない。あなたはコンボボックスに項目を追加するにはどうすればよい

+0

ComboBoxはデフォルトでは編集できません。 'IsEditable'を設定する必要はありません。 – Clemens

+0

Silverlight ComboBoxは編集をサポートしておらず、IsEditableは常にfalseです。 –

3

ここに短い作業サンプルがあります。

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:bys="clr-namespace:WpfApplication1" 
     xmlns:sys="clr-namespace:System;assembly=mscorlib" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.Resources> 
      <bys:MyList x:Key="lst"/> 
      <bys:MyConverter x:Key="myConverter"/> 
     </Grid.Resources> 
     <ComboBox ItemsSource="{StaticResource lst}" SelectedIndex="0"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Converter={StaticResource myConverter}}"/> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox > 
    </Grid> 
</Window> 

C#の:あなたは...

XAMLコードを比較することができ

public class MyList : List<int> { 
    public MyList() { 
     AddRange(new[] { 1, 2, 3, 4, 5, 6 }); 
    } 
} 

public class MyConverter : IValueConverter { 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
     return String.Format("<<{0}>>", value); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
     throw new NotImplementedException(); 
    } 
} 
関連する問題