首页 > 解决方案 > 在 WPF 中更改 DecimalUpDown 中的值时如何不启用按钮

问题描述

我有两个 DecimalUpDown。

最大之一和最小之一。

如果最小值大于最大值,则不应启用该按钮。

XAML

<tool:DecimalUpDown  Name="min"  Value="0.00" />
<tool:DecimalUpDown  Name="Max"  Value="0.00" />
<Button x:Name="Aplly" IsEnabled="{Binding MaxSmallerMin, UpdateSourceTrigger=PropertyChanged}" Content="Aplly" >

C#

 public MainWindow()
 {
  InitializeComponent();
  DataContext = this;
  }
 public bool MaxSmallerMin
        {
            get {
                if (min.Text != "" && max.Text != "")
                    if (Convert.ToDouble(min.Text) <= Convert.ToDouble(max.Text))
                        return true;
                return false;
            }            
        }

但这并没有改变。

标签: c#wpfxamldata-binding

解决方案


您必须告诉 GUI 您的MaxSmallerMin属性已更改。您可以使用该INotifyPropertyChanged界面来执行此操作。当min.Textmax.Text发生变化时,您必须调用相应的事件。您的代码可能如下所示:

C#:

class MainWindow : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

public MainWindow()
 {
  InitializeComponent();
  DataContext = this;
  }

 public bool MaxSmallerMin
        {
            get {
                if (min.Text != "" && max.Text != "")
                    if (Convert.ToDouble(min.Text) <= Convert.ToDouble(max.Text))
                        return true;
                return false;
            }            
        }

private void textChangedEventHandler(object sender, TextChangedEventArgs args)
   {
   PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MaxSmallerMin)));
   }
}

XAML:

<tool:DecimalUpDown  Name="min" TextChanged="textChangedEventHandler" Value="0.00" />
<tool:DecimalUpDown  Name="Max" TextChanged="textChangedEventHandler" Value="0.00" />

推荐阅读