0

テキストブロックで合計を更新しようとしていますが、WindowsPhoneエミュレーターを再起動することによってのみ更新できます。なんでそうなの?

DisplayBill.xamlのコード

<TextBlock x:Name="lbTotalAmt" Text="{Binding Path=Sum, Mode=TwoWay, UpdateSourceTrigger=Explicit}" Margin="0,364,0,10" Grid.Row="1" />

ViewModel.csのコード

    private string _Sum;
    public string Sum
    {
        get {return _Sum;}
        set
        {
            _Sum = value;
            NotifyPropertyChanged("Sum"); 
        }
    } 

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    // Used to notify Silverlight that a property has changed.
    private void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }

        if (propertyName == "ToDoBills")
            UpdateSumValue();
    }

    private void UpdateSumValue()
    {
      Sum = ToDoBills.Sum(i => i.Amount).ToString();
    }
    #endregion

更新
私がやろうとしているのは、リストボックスがアイテムを追加するたびにテキストブロックを更新することです。したがって、新しいアイテムがリストボックスに追加されるたびに、合計金額を表示するテキストブロックが更新されます。だから私の質問は、新しいアイテムがリストボックスに追加されるたびにテキストブロックを更新するにはどうすればよいですか?誰か助けてくれませんか?以下のバインディング式を使用してみましたが、役に立ちませんでした

public DetailPageBill()
    {
        InitializeComponent();

        // Set the page DataContext property to the ViewModel.
        this.DataContext = App.todoViewModel;

                BindingExpression be = lbTotalAmt.GetBindingExpression(TextBlock.TextProperty);
                 be.UpdateSource();                  

    }
4

1 に答える 1

-1

あなたのバインディングのためにに設定UpdateSourceTriggerしてみてください:PropertyChangedTextBlock

<TextBlock x:Name="lbTotalAmt" Text="{Binding Path=Sum, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="0,364,0,10" Grid.Row="1" />

Explicit自動更新なしで実行されます。MSDN は次のように述べています。

UpdateSource メソッドを呼び出した場合にのみバインディング ソースを更新します。

詳細については、 MSDN の UpdateSourceTriggerを参照してください。

于 2013-03-18T14:00:20.377 に答える