我正在尝试获取文本块中更新的总和,但是我只能通过重新启动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();
}
答案 0 :(得分:-1)
尝试为UpdateSourceTrigger
的约束设置PropertyChanged
至TextBlock
:
<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。