对文本块的数据绑定不会更新

时间:2013-03-18 13:57:57

标签: c# data-binding windows-phone-7.1

我正在尝试获取文本块中更新的总和,但是我只能通过重新启动Windows手机模拟器来更新它。为什么会这样?

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();                  

    }

1 个答案:

答案 0 :(得分:-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 on UpdateSourceTrigger