C# 使按钮在两个条件为真后可见,可绑定属性

Posted

技术标签:

【中文标题】C# 使按钮在两个条件为真后可见,可绑定属性【英文标题】:C# make button visible after two criteria are true with bindable property 【发布时间】:2018-02-28 15:36:29 【问题描述】:

我将一个按钮默认设置为IsEnabled = false。两个Entries 输入并验证后,按钮应更改为IsEnabled = true

这是我的主页上目前为止的内容:

var button = new Button
            
                Text = "Text",
                .
                .
                .
                IsEnabled = false
            ;

var entry1 = new Entry
            
                .
                .
                .
            ;

var entry1 = new Entry
            
                .
                .
                .
            ;

button.SetBinding(Button.CommandProperty, "EnableButtonComand");

在我的 ViewModel 上我有这个:

bool isValidatedEntry1 = false;
bool isValidatedEntry2 = false;
bool isAllValidated = false;

public Command EnableButtonCommand  get; 



public bool IsValidatedEntry1

    get  return isValidatedEntry1; 
    set  isValidatedEntry1 = value; OnPropertyChanged("IsValidatedEntry1"); OnPropertyChanged("IsAllValidated"); 

public bool IsValidatedEntry2

    get  return isValidatedEntry2; 
    set  isValidatedEntry2= value; OnPropertyChanged("IsValidatedEntry2"); OnPropertyChanged("IsAllValidated"); 

public bool IsAllValidated

    get  return isAllValidated; 
    set  if (IsValidatedEntry1 && IsValidatedEntry2)
            
                isAllValidated = true;
             
            else
            
                isAllValidated = false;
            
        OnPropertyChanged("IsAllValidated");
        EnableButtonCommand.ChangeCanExecute();
        

这在我的 ViewModel 类的构造函数中:

public Constructor()
        
            EnableButtonCommand = new Command(EnableButton, () => !IsAllValidated);
        

验证成功后,我的Validation-Class 将属性设置为True

我使用断点,看起来IsAllValidated 属性从未更新——只有“条目”属性是。为什么会发生这种情况,我应该改变什么?

【问题讨论】:

什么...为什么要在代码中创建 UI? 这与主题无关... 我没这么说。这表明更深层次的问题。 【参考方案1】:

IsAllValidated 作为可设置属性没有多大意义,因为它不需要value,并且不需要存储任何东西(因为它的状态完全依赖于其他人,如果我在解释你的要求正确)。相反,我会尝试这样的事情:

public bool IsAllValidated => IsValidatedEntry1 && IsValidatedEntry2;

【讨论】:

我会尝试将EnableButtonCommand.ChangeCanExecute() 添加到两个 Entry 属性的设置器中(或者添加一个他们可以调用的通用方法)。或者,您可能想检查Button.CommandProperty 是否是button.SetBinding 调用的正确绑定...这些都没有告诉按钮将其IsEnabled 从初始值更改为false。 看来是这样。感谢您的建议,但它不起作用。你有其他想法来完成我的任务吗?不可能那么难...我确定我只是缺少一些小代码!

以上是关于C# 使按钮在两个条件为真后可见,可绑定属性的主要内容,如果未能解决你的问题,请参考以下文章

wpf中的datagrid绑定操作按钮是否显示或者隐藏

C#怎么实现下拉框动态绑定数据

如何使 Silverlight 自定义控件的属性数据可绑定?

C# 命令绑定

在 UWP 中未检测到绑定可见性属性的变量

这会导致集合中的两个绑定绑定到同一个属性。参数名称:c#中的绑定错误?