在wpf c#中使用if语句和布尔值



在WPF形式的.NET框架中,我试图实现以下(看似(简单的任务:

我有3个按钮和3个文本框:
按钮1文本框1
按钮2文本框2
按钮3文本框3

如果我单击按钮1,我希望文本框1显示为true,另2显示为false。如果我单击按钮2,我希望文本框2分别显示true和false,按钮3和文本框3也是如此。

我想我可以通过将所有布尔值设置为true或false来实现这一点,这取决于使用点击事件点击的按钮,但没有得到预期的结果

using System;
using System.Windows;
using System.Threading;
using System.Windows.Threading;

namespace WPF_Test
{
public partial class MainWindow : Window
{
bool value1;
bool value2;
bool value3;

public MainWindow()
{
InitializeComponent();
if (value1 == true)
{
textbox1.Text = value1.ToString();
} else if (value2 == true){
textbox2.Text = value2.ToString();
} else if (value3 == true){
textbox3.Text = value3.ToString();
}
}                                                        
private void button1_Click(object sender, RoutedEventArgs e)
{
value1 = true;
value2 = false;
value3 = false;
}
private  void button2_Click(object sender, RoutedEventArgs e)
{
value1 = false;
value2 = true;
value3 = false;
}
private void button3_Click(object sender, RoutedEventArgs e)
{
value1 = false;
value2 = false;
value3 = true;
}
}
}

知道我可能错过了什么吗?

引用Rekshino的评论:

只需将InitializeComponent之后构造函数中的代码移动到单独的方法,然后在每个按钮的底部调用它。单击事件处理程序。–Rekshino

然而,我有限的知识并不能证明这是"最好的"版本,因此我参考了DM的答案以及

为了通过绑定到代码后面的值来更新WPF中的UI,您需要将字段更改为属性并实现INotifyPropertyChanged接口。马克·格雷维尔(Marc Gravell(给出了一个非常好的答案。

public partial class MainWindow : Window, INotifyPropertyChanged
{
private bool _value1;
public bool value1 
{
get => _value1;
set => SetField(ref _value1, value);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
value1 = true;
}

// Implementation of INotifyPropertyChanged with a
// SetField helper method to ensure you're only
// notifying when a value actually changes.
public event PropertyChangedEventHandler? PropertyChanged;
protected void OnPropertyChanged(string? propertyName) 
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
protected bool SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(field, value)) return false;
field = value;
OnPropertyChanged(propertyName);
return true;
}
}

相关内容

  • 没有找到相关文章

最新更新