2012-01-06 2 views
1

포리스트를 통해 나무를 볼 수 없습니다. 간단한 데이터 바인딩을 시도하고 변환기를 사용하여 값의 형식을 지정하려고합니다. (0이 표시되지 않습니다 컨버터 예에서, 숫자 데이터.)바운드 데이터 형식의 변환기

리소스 :

<conv:FormattingConverter x:Key="FormattingConverter"/> 
    <Style x:Key="EGTSTextBoxInt" TargetType="TextBox"> 
     <Setter Property="Background" Value="{StaticResource CC_BACKGROUND}" /> 
     <Setter Property="Foreground" Value="{StaticResource CC_FOREGROUND}" /> 
     <Setter Property="FontFamily" Value="{StaticResource DefaultFont}" /> 
     <Setter Property="FontSize" Value="{StaticResource DefaultFontSize}" /> 
     <Setter Property="FontWeight" Value="Normal" /> 
     <Setter Property="FontStyle" Value="Normal" /> 
     <Setter Property="VerticalContentAlignment" Value="Center" /> 
     <Setter Property="VerticalAlignment" Value="Center" 
     <Setter Property="HorizontalAlignment" Value="Center" /> 
     <Setter Property="HorizontalContentAlignment" Value="Center" /> 
     <Setter Property="IsReadOnly" Value="True" /> 
    </Style> 

텍스트 상자 :

<TextBox Name="Bill_Item" 
      Grid.Column="6" 
      MinWidth="46" 
      MinHeight="23" 
      Style="{StaticResource EGTSTextBoxInt}" 
      Text="{Binding Path=Item, Mode=TwoWay, 
        Converter={StaticResource FormattingConverter}, 
        ConverterParameter=\{0:G\}}" /> 

내가 뭘 원하는 것은에 포함 된 변환 코드를 얻을 수있다 스타일은 각 Text = line에서 철자를 쓰지 않아도됩니다.

XAML 뒤에 코드를 추가하면 아무 것도 할 수 없습니다.
순수한 XAML 메서드를 찾고 있습니다.

나는 스타일에서 어떤 일이 어떻게 이루어지고 있는지 여전히 파악하려고합니다.

브라이언

+0

스타일에 세터의 일부가있을 수 없습니다. I.E. 스타일에 전체 텍스트 바인딩 라인이 필요하거나 그렇지 않습니다. 당신은 반을 할 수 없습니다. – mydogisbox

답변

0

.
그러나 당신도 시작하기 전에 :

  • 그것은
    아이디어는 바인딩에서 상속하는 사용자 정의 태그 확장을 정의 귀하의 경우

1)에서 완전히 쓸모

  • 무거운 Text ="{Binding SomeProperty}"을 작성할 수있는 마크 업 확장 프로그램입니다.당신은 스타일에 기능을 넣을 수 없습니다 자신의 바인딩 here
    이 솔루션을 만든 사람의 예를 찾을 수 있습니다
    .

    2) 연결된 속성을 정의
    당신은을 사용하기 위해) <TextBox>my text</TextBox>을 할 수 귀하의 경우 (컨트롤의 기본 속성의 바인딩을 수정합니다 는, 텍스트, 텍스트 상자의 기본 속성입니다 컨버터를 자동으로 선택합니다.
    실제로이 스타일을 스타일에 추가 할 수 있습니다. 그러나 그것은 매우 나쁜 습관입니다. 그것은 마술의 끈처럼 나쁘다.

    3) 단지하지 않는,이 작업을 수행하지 마십시오.
    매번 변환기를 작성하십시오.

  • +0

    0과 같거나 경우 (형식 글로벌 변화가 사용되는 예) – BRisley

    +0

    예, 할 그 두 개의 연결된 속성의 리소스를 통해 매개 변수를 사용하여 변환 할 수있는 방법이 있나요 빈 값을 표시합니다 : 이 글로벌 될 운명 않다면 하나 autoconverted로 매개 변수를 설정하려면, 하나를 컨트롤을 표시 할 수 있습니다. 그런 다음 라벨로 이동 app.xaml –

    +0

    에 그것을 형식의 설정을 암시 적 스타일을 넣고 컨버터를 가지고있는 V를 조회 시작시로드 된 목록의 레이블 (또는 올바른 형식 명령을 얻은 경우 사용)을 사용하십시오. 이를 통해 우리는 즉시 XAML을 빌드하고 단일 위치에서 형식을 변경할 수 있으며 필요할 경우 사용자 수준까지 변경을 지원할 수도 있습니다. – BRisley

    0

    텍스트 상자의 Text 속성은 데이터에 관한 것입니다. Style 속성은 해당 데이터의 모양을 나타냅니다. 변환기를 스타일에 연결하는 것은 의미가 없습니다.

    편집 : 지금 내가 말하고자하는 것을 보았습니다. 당신은 Text="{Binding Path=Item}"을 한 곳에서 원합니다. <Setter Property="Text" Value="~somehow get the converter in here and have it applied to the existing text property which is bound to Items~" />

    mydogisbox가 언급했듯이, 저는 이러한 아이디어를 두 곳에서 분리 할 수 ​​있다고 생각하지 않습니다.

    +0

    이것은 데이터가 어떻게 보이는지에 관한 것입니다. 0 인 필드를 비우는 것은 값이 0이거나 음수 일 때 배경을 변경하는 것과 거의 같습니다. – BRisley

    +0

    실제로 그 일을하려고 했습니까? – epalm

    +0

    즉하고 (즉,/DD/YYYY 포맷 또는 날짜/MM/DD/YYYY hh가 시간 mm 날짜 데이터 형식 :.있는 StringFormat 2 진수거나 mm의 A/P 및 통화에 대한 일련 번호에 떠 – BRisley

    0

    Converters 다른 값으로 하나 개의 값을 변환하는, 그래서 그들은

    당신은 그러나 당신이 변환기

    <TextBox Text="{Binding Path=Item, StringFormat=G}" /> 
    

    없이 형식 값으로 바인딩에 StringFormat을 사용할 수있는 변환 된 값없이 사용할 수 없습니다 Binding 클래스에서 상속받은 클래스를 만들 수도 있고 기본값 인 StringFormat을 설정합니다.이 클래스는 가치가있는 것보다 더 문제가 있다고 느낍니다.

    <TextBox Text="{local:NumberBinding Path=Item}" /> 
    

    그리고 만약 당신이 대신 텍스트 상자의 라벨 작업하는 경우, 당신이 서식을 적용 할, ContentStringFormat에 스타일 세터를 적용 할 수있는 라벨의 Content이 작업을 수행하는 방법은 여러 가지가 있습니다

    <Style TargetType="{x:Type Label}"> 
        <Setter Property="ContentStringFormat" Value="G" /> 
    </Style> 
    
    +0

    문제 이 0 또는 날짜 범위에서 블랭킹 제어 할 수 없다는 것은. 컨버터의 대신 사용하는 것을 선호하지만, 우리가 필요로하는 옵션으로 할 수있는 방법을 발견하지 않을 것입니다. – BRisley

    +0

    을 당신은'DataTrigger'을 사용할 수 있습니다 @BRisley 값이'DateTime.MinValue' – Rachel

    관련 문제