Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';我的WPF绑定(在C代码中)有什么问题?_C#_Wpf_Binding - Fatal编程技术网

C# 什么';我的WPF绑定(在C代码中)有什么问题?

C# 什么';我的WPF绑定(在C代码中)有什么问题?,c#,wpf,binding,C#,Wpf,Binding,我很久没有使用WPF了,所以我很确定这对大多数人来说都是一个简单的问题,但下面是我的xaml代码: <Grid> <ProgressBar Name="Progress" Width="200" Height="20" Minimum="0" Maximum="100" Margin="10"/> </Grid> 当应用程序启动时,我的ProgressBar上有一个99的值,因此绑定似乎可以工作,但它根本不会刷新…Progress.value=MyI

我很久没有使用WPF了,所以我很确定这对大多数人来说都是一个简单的问题,但下面是我的xaml代码:

<Grid>
    <ProgressBar Name="Progress" Width="200" Height="20" Minimum="0" Maximum="100" Margin="10"/>
</Grid>

当应用程序启动时,我的ProgressBar上有一个99的值,因此绑定似乎可以工作,但它根本不会刷新…

Progress.value=MyInt
只是将值设置为
MyInt
中的当前值。这与绑定值不同,这意味着该值将指向
MyInt
,而不是
MyInt

要在代码隐藏中创建绑定,它将如下所示:

Binding b = new Binding();
b.Source = this;
b.Path = new PropertyPath("MyInt");
Progress.SetBinding(ProgressBar.ValueProperty, b);
另一种方法是只绑定XAML中的值,并根据需要进行更新:

<ProgressBar Name="Progress" Value="{Binding MyInt}" />


然后在代码隐藏中:
MyInt=newValue

首先,我认为您的窗口不应该实现
INotifyPropertyChanged
。 您正在将数据放入窗口中。您应该有一个单独的类来实现
INotifyPropertyChanged
,然后将其设置为窗口的DataContext。之后,您需要通过代码或在XAml中添加绑定,如下所示:

<ProgressBar Name="Progress" Width="200" Height="20" Minimum="0" Maximum="100" Margin="10" Value="67" Value="{Binding MyInt}"/>


Progress.Value=MyInt;不应该这样做吗?我试着使用ListBox的ItemSource,它起了作用。看看这个:我知道我可以“手动”进行绑定,但我不能这样做吗?(就像在我的代码片段中一样)代码片段所做的只是为控件的值赋值。您需要显式地设置绑定以使其工作(在xaml中或在代码中)。我不确定是否有必要更改INotifyPropertyChanged,但问题是我想用C代码(而不是xaml)编写绑定!INotifyPropertyChanged通常用于视图模型,而不是视图。由于您的视图中有代码,代码隐藏,这与您使用的体系结构不太合适。Rachel发布了在C#中创建绑定所需的代码。但是您仍然需要INotifyPropertyChanged,因为WPF无法知道值何时更改,除非它每次都检查它,这是非常次优的,我们需要让它知道发生了更改。@mydogisbox即使它在窗口中,WPF也无法知道值是否更改,除非他调用Progress.Value=MyInt;每次MyInt发生更改且大小写绑定已被使用时,请编码此奇怪错误:无法使用实例引用访问Member System.Windows.Controls.Primitives.RangeBase.ValueProperty;用类型名限定它instead@GuillaumeCogranne抱歉,绑定需要引用
ProgressBar
类,而不是您的ProgressBar实例。我更新了我的回答。我在新版本中遇到了这个错误:{“'在类型'WpfApplication1.MainWindow'上调用与指定绑定约束匹配的构造函数时引发了异常。'行号'3'和行位置'9'。}如果我对行“Progress.SetBinding(ProgressBar.ValueProperty,myBinding);”我没有得到更多的错误,但绑定不工作ofc!如果我尝试绑定xaml文件,我也会遇到同样的错误:(不知道这是否与im使用的计时器有关
<ProgressBar Name="Progress" Width="200" Height="20" Minimum="0" Maximum="100" Margin="10" Value="67" Value="{Binding MyInt}"/>