2013-05-21 4 views
2

은 (첫째, 난 당신이 이해하기 위해 샘플을 단순화.) 는 WPF : 편집 가능한 콤보하고있는 StringFormat

내가 인치의 값을 표시하는 편집 콤보를 원한다. 원본 (원본) 값은 응용 프로그램이 내부적으로 작동하는 단위이기 때문에 픽셀 (DIP)의 값입니다. 사용자는 픽셀 단위로 값을 보지 말아야하지만 인치 단위 (UI의 측정 단위)로보아야합니다. 나는 변환기를 사용하여 픽셀에서 인치 및 역변환으로 변환해야한다고 결정했습니다.

ComboBox 항목의 형식은 "{0} in"이어야합니다.

은 내부적으로 픽셀 단위로 작업을해야 기억이

[ 4 in |v] 
    [ 1 in ] 
    [ 2 in ] 
    [ 3 in ] 
    [ 4 in ] 

처럼 보이지만한다! 편집 할 수 있어야합니다. 이것은 작업 부분입니다. 나는 이것을 완전히 달성 할 수 없었다.

나는이 지금까지 가지고

<ComboBox IsEditable="True" 
      ItemStringFormat="'{}{0} in}'"     
      Text="{Binding RelativeSource={RelativeSource Self}, Path=SelectedValue, Mode=TwoWay, Converter={StaticResource MyPixelToInchesConverter}, StringFormat='{}{0} in}'}"> 
      <system:Double>1</system:Double> 
      <system:Double>2</system:Double> 
      <system:Double>3</system:Double> 
    </ComboBox> 

문제? 항목을 선택하면 서식이 지정되지 않습니다. 그리고 ComboBox의 편집 가능 영역에 숫자를 쓸 때도 형식이 지정되지 않습니다.

그렇다면 사용자가 존재하지 않는 값을 입력하더라도 ComboBox가 항목의 서식을 지정하는 가장 좋은 방법은 무엇입니까 ??

감사합니다.

답변

0

아마 조금 늦었지만 바인딩을 사용하기 위해 Text 속성을 설정하면 약간의 kludge가 작동한다는 것을 알았습니다. 내 경우에는 내가 통화 값으로 작업했지만, 동일한 원리 그러나

Text = {Binding Path=Indemnity, StringFormat=C0} 

을 적용해야합니다, 목록에없는 텍스트 값을 입력 여전히 StringFormat 알려진 어떤 이상한 이유로 (적용되지 않는 문제를 전시 이것을 설계 한 MS 사람들에게만).

는이 문제를 해결하려면

, 나는 다시 올바른 값을 작성하여 다음 단순히 잘못된 값을 기록하는 LostFocus 핸들러 추가 -되는 StringFormat이 적용되는 단계 :

private void IndemnityCombo_LostFocus(object sender, RoutedEventArgs e) 
{ 
    var vm = this.DataContext as RatesViewModel; // A view model class 
    if (vm != null) { 
     decimal indemnity = vm.Indemnity; 
     vm.Indemnity = indemnity + 1M; 
     vm.Indemnity = indemnity; 
    } 
} 

그것은 우아한되지를하지만, 나를 위해 일한다. 희망은 다른 사용자에게 유용 할 수 있습니다.