我正在尝试创建一个在属性值更改时更新的进度条 我已经关注了其他问题,但我不知道它有什么问题。
这是XAML代码:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1" x:Class="WpfApplication1.MainWindow"
Title="MainWindow">
<Grid Margin="0,0,-8,1">
<ProgressBar Value="{Binding Progreso, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}}" Margin="105,95,207,350"/>
<Button Content="Button" Click="Button_Click" Margin="218,232,333,217"/>
</Grid>
</Window>
它基本上是一个带有绑定的进度条和一个带有监听器的按钮,使Progreso增加10 这是C#代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string sProp)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(sProp));
}
}
float progreso = 10;
public float Progreso
{
get
{
return progreso;
}
set
{
progreso = value;
NotifyPropertyChanged("Progreso");
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.Progreso = this.Progreso + 10;
}
}
我试图保持简单,但我无法让它工作,任何帮助都将不胜感激。
编辑:我也尝试过UpdateSourceTrigger = PropertyChanged并且无法正常工作
答案 0 :(得分:2)
AncestorType
似乎不起作用。所以你有两个选择:
Name
并按DataContext
ElementName
DataContext
设置为this
并删除RelativeSource部分答案 1 :(得分:2)
您的问题是您错过了INotifyPropertyChanged
接口实现的声明:
public partial class MainWindow : Window, INotifyPropertyChanged {
//....
}
注意:使用RelativeSource
工作正常,我对此进行了测试。使用DataContext
只是一种设置Source
的隐式方法,尽管这是一种方便和推荐的方式。
关于使用DataContext
:
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
<ProgressBar Value="{Binding Progreso}" Margin="105,95,207,350"/>