C# 如何根据类中的其他变量控制按钮的IsEnable属性?
我基本上遇到了一个问题,我有一些按钮被激活,需要根据类中的一些其他变量/属性来控制属性 因此,在XAML中,我可能会:C# 如何根据类中的其他变量控制按钮的IsEnable属性?,c#,wpf,data-binding,xaml,binding,C#,Wpf,Data Binding,Xaml,Binding,我基本上遇到了一个问题,我有一些按钮被激活,需要根据类中的一些其他变量/属性来控制属性 因此,在XAML中,我可能会: <Window x:Class="RoboticPainterGUI.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<Window x:Class="RoboticPainterGUI.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:RoboticPainterGUI"
Loaded="Window_Loaded" Name="Window_Main"
Title="MainWindow" Height="555" Width="630">
<Grid>
<Button Name="Button_Next" Content="Lorem Ipsum" />
</Grid>
</Window>
namespace RoboticPainterGUI
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
int A, B;
bool ButtonEnabledProp
{
get
{
return ((A + B) >= 5);
}
}
public MainWindow()
{
InitializeComponent();
}
}
}
在代码背后,我可能有:
<Window x:Class="RoboticPainterGUI.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:RoboticPainterGUI"
Loaded="Window_Loaded" Name="Window_Main"
Title="MainWindow" Height="555" Width="630">
<Grid>
<Button Name="Button_Next" Content="Lorem Ipsum" />
</Grid>
</Window>
namespace RoboticPainterGUI
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
int A, B;
bool ButtonEnabledProp
{
get
{
return ((A + B) >= 5);
}
}
public MainWindow()
{
InitializeComponent();
}
}
}
painterGUI
{
///
///MainWindow.xaml的交互逻辑
///
公共部分类主窗口:窗口
{
INTA,B;
bool按钮可启用DPROP
{
得到
{
返回((A+B)>=5);
}
}
公共主窗口()
{
初始化组件();
}
}
}
所以,我想要的行为如下:
当A和B之和等于或大于5时,
应启用该按钮。当它
小于5时,按钮应为
残疾人
已经编写了按钮EnabledTop
,以帮助完成此过程。除了在代码中A和B发生更改的每个部分手动设置按钮状态外,如何实现这一点
绑定到转换器会很好,但是转换器不能访问a或B。
绑定到属性本身会很好,但我不知道如何做,也没有找到如何做的示例。您应该让MainWindow实现INotifyPropertyChanged接口,并调用OnPropertyChanged,属性名称为“ButtonneEnabledPro”:
public partial class MainWindow : Window, INotifyPropertyChanged
{
int A, B;
bool ButtonEnabledProp
{
get
{
return ((A + B) >= 5);
}
}
public MainWindow()
{
InitializeComponent();
A = B = 3;
NotifyPropertyChanged("ButtonEnabledProp");
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
然后,您可以修改xaml文件以向其添加数据绑定,并具有如下功能:
<Window x:Class="RoboticPainterGUI.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:RoboticPainterGUI"
Loaded="Window_Loaded" Name="Window_Main"
Title="MainWindow" Height="555" Width="630">
<Grid>
<Button Name="Button_Next" Content="Lorem Ipsum" IsEnabled="{Binding Path=ButtonEnabledProp}" />
</Grid>
</Window>
我刚刚粘贴的代码将使您的按钮处于启用状态
如果您想自动化您的流程,没有简单的方法。但这很好
希望这对您有所帮助如果您需要使用绑定,最好将此属性放在另一个类上,而不是视图本身上 因此:
- 创建一个类(ViewModel)
- 将此属性添加到类中
- 在按钮的IsEnabled上添加视图的绑定
- 将视图的DataContext设置为ViewModel的实例
- 当条件更改时,实现
接口并引发INotifyPropertyChanged
事件PropertyChanged