我试图了解每次使用 WPF (XAML) 修改窗口上的选项时如何调用 Resfresh() 或 Work() 方法。我已经问了这个问题,但我还不够清楚。所以我会用一个更好的例子再问一次。
我想知道如何从许多视觉组件中更新标签。假设我们有 10 个标签为 0 到 9 的复选框,如果它们被选中,我想做它们的总和。
在经典 Winform 中,我将创建一个事件处理程序 OnClick() 并在每个 CheckBox 状态更改时调用该事件。OnClick 调用 Refresh() 全局方法。刷新评估是否检查了每个 CheckBox 并在需要时将它们相加。在 Refresh() 方法结束时,我将 Label Text 属性设置为我的总和。
如何使用 XAML 和数据绑定来做到这一点?
<CheckBox Content="0" Name="checkBox0" ... IsChecked="{Binding Number0}" />
<CheckBox Content="1" Name="checkBox1" ... IsChecked="{Binding Number1}" />
<CheckBox Content="2" Name="checkBox2" ... IsChecked="{Binding Number2}" />
<CheckBox Content="3" Name="checkBox3" ... IsChecked="{Binding Number3}" />
<CheckBox Content="4" Name="checkBox4" ... IsChecked="{Binding Number4}" />
...
<Label Name="label1" ... Content="{Binding Sum}"/>
在我的 ViewModel 中,每个复选框都有一个数据绑定属性,Sum 有一个属性
private bool number0;
public bool Number0
{
get { return number0; }
set
{
number0 = value;
NotifyPropertyChanged("Number0");
// Should I notify something else here or call a refresh method?
// I would like to create something like a global NotifyPropertyChanged("Number")
// But how can I handle "Number" ???
}
}
// Same for numer 1 to 9 ...
private bool sum;
public bool Sum
{
get { return sum; }
set
{
sum = value;
NotifyPropertyChanged("Sum");
}
}
private void Refresh() // or Work()
{
int result = 0;
if (Number0)
result = result + 0; // Could be more complex that just addition
if (Number1)
result = result + 1; // Could be more complex that just addition
// Same until 9 ...
Sum = result.ToString();
}
我的问题是我应该如何以及何时调用此 Refresh 方法?