我使用以下命令更新GUI上的按钮
PropertyChanged(this, new PropertyChangedEventArgs(resetButton.IsEnabled = false));
然而,我收到错误`
参数1:无法从'bool'转换为'string'
修改
单击该按钮时要禁用的按钮的XAML代码。
resetButton.IsEnabled = false
是我最初尝试用来禁用它的。
<Button x:Name="resetButton"
Grid.Row="1"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Width="80"
Content="Reset"
Style="{StaticResource BlueButton}"
Click="resetButton_Click"/>
答案 0 :(得分:-1)
我将首先讨论编译器抱怨的仅仅是语法错误:
你调用
new PropertyChangedEventArgs(resetButton.IsEnabled = false)
在那里,表达
resetButton.IsEnabled = false
将评估为bool
。因此,您将bool
传递给PropertyChangedEventArgs
的构造函数。
但是,that constructor需要string
,即更改后的属性的名称。
现在,关于预期的结果:
我使用以下命令更新GUI上的按钮
不,你不是。至少,不是直接。
您可以使用PropertyChanged
调用的内容是触发任何使用PropertyChanged
事件注册的事件处理程序,然后可以执行您希望他们执行的操作,例如更新GUI中的内容。
因此,在代码的其他地方,你必须写下这样的东西:
myObject.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
{
resetButton.IsEnabled = false;
}
这将创建一个匿名方法,并将其注册为事件的事件处理程序。
现在,通常是,您还需要检查e
参数上的PropertyName
property,以查看 myObject
的属性实际上已经改变了。
在这里,我们回到你对事件的触发:你必须在构造PropertyChangedEventArgs
实例时传入已更改属性的属性名称。
如果您的媒体资源属于bool
类型(或者您有适当的value converter可将您的媒体资源转换为bool
),则可以还直接将XAML中的resetButton.IsEnabled
属性绑定到您的属性。然后它将自动注册一个带有PropertyChanged
事件的处理程序,以便在需要时更新按钮的启用状态。