下面我们用Binding实现一个简单的小程序。
首先是界面XAML:
<Grid>
<StackPanel>
<ProgressBar Name="Bar1" Margin="5" Height="20" Maximum="100" Minimum="0"></ProgressBar>
<ProgressBar Name="Bar2" Margin="5" Height="20" Maximum="100" Minimum="0"></ProgressBar>
<ProgressBar Name="Bar3" Margin="5" Height="20" Maximum="100" Minimum="0"></ProgressBar>
<ProgressBar Name="Bar4" Margin="5" Height="20" Maximum="100" Minimum="0"></ProgressBar>
<Button Margin="5" Click="Start_Click">Start</Button>
</StackPanel>
</Grid>
4 个 ProgressBar
对应的cs代码:
首先定义一个数据源
class Value : INotifyPropertyChanged
{
private int iValue;
public int IntValue
{
get { return iValue; }
set
{
iValue = value;
if (PropertyChanged != null)
{
PropertyChanged.Invoke(this, new PropertyChangedEventArgs("IntValue"));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
然后是主要逻辑
public partial class MainWindow : Window
{
private static Value value1 = new Value();
private static Value value2 = new Value();
private static Value value3 = new Value();
private static Value value4 = new Value();
public MainWindow()
{
InitializeComponent();
this.Bar1.SetBinding(RangeBase.ValueProperty, new Binding("IntValue") {Source = value1});
this.Bar2.SetBinding(RangeBase.ValueProperty, new Binding("IntValue") { Source = value2 });
this.Bar3.SetBinding(RangeBase.ValueProperty, new Binding("IntValue") { Source = value3 });
this.Bar4.SetBinding(RangeBase.ValueProperty, new Binding("IntValue") { Source = value4 });
}
private static Timer timer = GetTimer();
private static bool flag = false;
private void Start_Click(object sender, RoutedEventArgs e)
{
if (!flag)
{
timer.Enabled = true;
flag = true;
}
else
{
flag = false;
timer.Enabled = false;
}
}
private static void GetRandom()
{
Random rd = new Random();
value1.IntValue = rd.Next(0, 100);
value2.IntValue = rd.Next(0, 100);
value3.IntValue = rd.Next(0, 100);
value4.IntValue = rd.Next(0, 100);
}
private static Timer GetTimer(int val = 30)
{
Timer timer = new Timer(val);
timer.Elapsed += (sender, e) =>
{
GetRandom();
};
return timer;
}
}
函数GetTimer 返回一个计时器,这个计时器每隔0.003s触发一次。然后对4个Value的实例的属性进行修改(使用随机数)。
- 构造函数中对四个PrograssBar进行了绑定,绑定的数据源就是4个静态变量的IntValue属性。
- 当按钮被按时会开启定时器然后修改属性值,从而修改PrograssBae的值。在按按钮则会关掉定时器。再按开启。。。
实验现象: