2012-02-20 9 views
1

표시 할 때보다 사용자에게 친숙한 문자열 형식으로 변환하고자하는 숫자 값이 있습니다. 나는 이미 정상적인 TextBlock UI 항목에 대해 이렇게하기 위해 사용하고있는 FlightLevelConverter이라는 IValueConverter를 가지고있다.Silverlight에서 변환기가 포함 된 ComboBox에 바인딩

이제 컨버터를 고도 선택의 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은 내가 무엇을 잘못하고 있는지 발견하려고 노력하지만 특히 유용한 것을 발견하지는 못했다.

왜 변환기가 호출되지 않습니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

당신이 항목을 채우는 방법과 함께 전체 XAML 파일을 게시하시기 바랍니다. – gaurawerma

답변

3

어떻게 항목을 ComboBox에 추가합니까?

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

아하. 이것은 문제가되는 것처럼 보입니다. 귀하의 두 번째 예제에 따라 항목을 추가하고 있습니다. ItemsSource를 설정하려고합니다. 고맙습니다. –

+0

예, 그 트릭을했습니다. 다시 한번 감사드립니다. –

+0

반갑습니다. 바인딩에는 [StringFormat] (http://msdn.microsoft.com/en-us/library/Cc491086 (v = v1) .aspx) 속성이 있으므로 속성이 필요하지 않음을 유의하십시오.) 변환기. – Clemens

-1

ComboBox.IsEditable == true 인 경우 ComboBox.ItemTemplate은 ComboBox의 주요 부분에 적용 할 수 없습니다. 드롭 다운 목록 항목에만 적용됩니다. 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(); 
    } 
} 
관련 문제