2012-06-14 5 views
0

내 창에서 일련의 동적 계산 필드를 만들려고합니다.WPF에서 동적 계산 필드 만들기

은 지금은 여기

<Window.Resources> 
    <src:PaymentVarianceConverter x:Key="PaymentConverter" /> 
</Window.Resources> 

<TextBlock Text="{Binding Path=., Converter={StaticResource PaymentConverter}, 
        ConverterParameter=CASH, StringFormat={}{0:C}, Mode=OneWay}"/> 
<TextBlock Text="{Binding Path=., Converter={StaticResource PaymentConverter}, 
        ConverterParameter=CHECK, StringFormat={}{0:C}, Mode=OneWay}"/> 

는 변환기입니다 ... 폼이로드는 다음과 같이 때 작업이 :

public sealed class PaymentVarianceConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (!(value is Route)) 
      return null; 
     var route = value as Route; 

     switch (parameter.ToString()) 
     { 
      case "CASH": 
       return route.CashTotal - route.TotalExpectedCash; 
      case "CHECK": 
       return route.CheckTotal - route.TotalExpectedCheck; 
      default: 
       return null; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException("ConvertBack Not implemented"); 
    } 
} 

모든이 때 새로 고쳐지지 않습니다 제외하고 이것이 잘 작동 기본 값 (예 : route.CashTotal)이 변경됩니다.

동적으로 새로 고칠 수있는 방법이 있습니까? 나는 그들에게 많은 것들이 있기 때문에 나는 그것들을 내 소스 객체에 등록하지 않고 OnPropertyChanged()를 호출하는 것을 피하고 싶다.

답변

1

데이터 바인딩은 바인딩 된 값이 변경 될 때 알림을 받아야합니다. 이 작업을 수행하려면 INotifiyPropertyChanged을 구현해야합니다. (또는 의존성 프로퍼티들, 그러나 그것은 당신 대신에 더 많은 작업을 필요로합니다.) WPF는 불행하게도 심령 능력을 가지고 있지 않습니다.

+0

빠른 응답 감사합니다. 저는 WPF에 익숙하지 않습니다. Win Forms 세계에서 왔습니다. 창에있는 다른 TextBoxes의 계산에 TextBox의 텍스트 속성을 바인딩하는 방법이 있는지 확실하지 않았습니다. –

+0

@GabrielMontanaro : 'TextBox.Text' 속성이 바인딩 프레임 워크와 상호 작용하고 변경 될 때 알림을 보내는 종속성 속성이기 때문에 컨트롤간에 데이터 바인딩을 만들 수 있습니다. 그러나, 당신은 DataContext'에 직접 바인딩하는 것처럼 보입니다. 그러면 데이터 바인딩 프레임 워크에 변경 사항을 알리는 방법을 구현해야합니다. –