2012-06-14 2 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. Не был уверен, есть ли способ привязать текстовое свойство TextBox к вычислению других текстовых полей в окне. –

+0

@GabrielMontanaro: вы можете создавать привязки данных между элементами управления, потому что свойство 'TextBox.Text' является свойством зависимости, которое взаимодействует со структурой привязки и отправляет уведомления при его изменении. Однако вы, кажется, привязываетесь непосредственно к «DataContext», который затем должен реализовать способ уведомлять структуру привязки данных к изменениям. –

Смежные вопросы