我基本上遇到一个问题,我有一些按钮需要根据类中的其他变量/属性来控制IsEnabled属性。
所以在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();
}
}
}
那么,我想要的行为如下:
当A和B的总和为5或更多时, 应该启用该按钮。当它 小于5,按钮应该是 禁用。
已经编写了ButtonEnabledProp
来帮助完成此过程。除了在A和B被更改的代码中的每个部分手动设置按钮的状态之外,如何实现它?
绑定到转换器会很好,但转换器无法访问A或B. 绑定到属性本身会很好,但我不知道如何做到这一点,并没有找到一个示例如何。
答案 0 :(得分:1)
您应该让MainWindow实现INotifyPropertyChanged接口,并调用OnPropertyChanged,并将“ButtonEnabledProp”作为属性名称:
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>
我刚刚粘贴的代码会启用您的按钮。
如果您想自动化您的流程,那么没有简单的方法。但是PostSharp做得很好。
希望这有帮助
答案 1 :(得分:0)
如果需要使用绑定,最好将此属性放在另一个类而不是视图本身上。
所以:
INotifyPropertyChanged
界面并举起PropertyChanged
事件。