C# 数据绑定Wpf与文本框
我有一个像这样的屏幕 输入条件为:C# 数据绑定Wpf与文本框,c#,wpf,C#,Wpf,我有一个像这样的屏幕 输入条件为: 0-4:婴儿(红色) 5-10:儿童(绿色) 11-14:儿童(蓝色) 15-18岁:青少年(黄色) 18-23:成人(奥加纳) 因此,当我导入“23”时,它将显示“成人”和“橙色”颜色 有人能帮我吗 因此,本系统将使用2个转换器 用于显示婴儿、成人等姓名 用于显示颜色 触发器在这里没有帮助,因为触发器检查只等于,而不适用于其他运算符,如=或。为此,您必须使用转换器 这两个转换器都将使用您的年龄属性,并将根据如下条件返回值和颜色。您可以使用两个转换器,从文
- 0-4:婴儿(红色)
- 5-10:儿童(绿色)
- 11-14:儿童(蓝色)
- 15-18岁:青少年(黄色)
- 18-23:成人(奥加纳)
有人能帮我吗 因此,本系统将使用2个转换器
=
或
。为此,您必须使用转换器
这两个转换器都将使用您的年龄属性,并将根据如下条件返回值和颜色。您可以使用两个转换器,从文本框读取值并返回适当的数据(文本和颜色) 年龄范围到文本转换器:
class RangeToTextConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int age = (int)value;
string output = "";
if (age >= 0 && age <= 4)
{
output = "Baby";
}
else if (age >= 5 && age <= 10)
{
output = "Kid";
}
else if (age >= 11 && age <= 14)
{
output = "Children";
}
else if (age >= 15 && age <= 18)
{
output = "Teens";
}
else if (age >= 18 && age <= 23)
{
output = "Adult";
}
return output;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
class RangeToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int age = (int)value;
Brush output = Brushes.Transparent;
if (age >= 0 && age <= 4)
{
output = Brushes.Red;
}
else if (age >= 5 && age <= 10)
{
output = Brushes.Green;
}
else if (age >= 11 && age <= 14)
{
output = Brushes.Blue;
}
else if (age >= 15 && age <= 18)
{
output = Brushes.Yellow;
}
else if (age >= 18 && age <= 23)
{
output = Brushes.Orange;
}
return output;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
class RangeToTextConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
int年龄=(int)值;
字符串输出=”;
如果(年龄>=0&&age=5&&age=11&&age=15&&age=18&&age=0&&age=5&&age=11&&age=15&&age=18&&age我提出了一个没有转换器的解决方案,因为我发现它们有时有点过分了
public class YourClass : INotifyPropertyChanged
{
private int _num;
public int Num
{
get => _num;
set
{
if (Equals(value, _num)) return;
_num = value;
if (value >= 0 && value <= 4)
{
Col = Brushes.Red;
}
else if (value >= 5 && value <= 10)
{
Col = Brushes.Green;
}
else if (value >= 11 && value <= 14)
{
Col = Brushes.Blue;
}
else if (value >= 15 && value <= 18)
{
Col = Brushes.Yellow;
}
else if (value >= 18 && value <= 23)
{
Col = Brushes.Orange;
}
OnPropertyChanged();
}
}
private Brush _col;
public Brush Col
{
get => _col;
set {
_col = value;
OnPropertyChanged();
}
}
}
公共类YourClass:INotifyPropertyChanged
{
私有整数;
公共整数
{
get=>\u num;
设置
{
if(等于(value,_num))返回;
_num=值;
如果(值>=0&&value=5&&value=11&&value=15&&value=18&&value&&col;
设置{
_col=值;
OnPropertyChanged();
}
}
}
您忘记发布代码:)您可以在输入属性的setter
上放置触发器,然后该触发器更改文本和color@user2657943:触发器不检查范围。取决于您的设置方式…如果以下任何答案解决了您的问题,请单击复选标记将其标记为已接受。在sett中设置Baby或Kid等如何年龄限制?我想你说的是触发器。触发器不检查范围。不,不是触发器。我说的是将CLR属性设置器中的字设置为失去焦点。你可以。但那代码将是一个ViewModel函数。放入转换器,我们也可以在xaml和ViewModel中使用它。转换器更灵活、更干净。当你如果你想更改某个元素的功能,你可以只交换一个绑定的转换器,而不是重写所有内容。在ViewModel的代码隐藏中使用转换器而不是属性的主要原因是,可以很容易地将其交换为另一个,而无需修改你的ViewModel根据“良好”编码的多种指导原则,这意味着创建可扩展的解决方案,并且不需要对代码进行修改(或根据需要进行少量修改)。此外,在这样一个简单的例子中,这似乎没有问题,但项目越大,ViewModel的集群化程度就越高。然而,这是一个有效的解决方案。在ViewModel中包含笔刷的有效性有多高???@NareshRavlani在ViewModel中包含笔刷在很多情况下都是有效的,在其他许多情况下都是无效的。您可能会需要一个特定的上下文来决定。但是,在这个上下文中,我会使用值转换器。至于原因,请参考我上面的评论。我会为画笔创建属性,因此实际画笔仍然可以在视图中定义。
public class YourClass : INotifyPropertyChanged
{
private int _num;
public int Num
{
get => _num;
set
{
if (Equals(value, _num)) return;
_num = value;
if (value >= 0 && value <= 4)
{
Col = Brushes.Red;
}
else if (value >= 5 && value <= 10)
{
Col = Brushes.Green;
}
else if (value >= 11 && value <= 14)
{
Col = Brushes.Blue;
}
else if (value >= 15 && value <= 18)
{
Col = Brushes.Yellow;
}
else if (value >= 18 && value <= 23)
{
Col = Brushes.Orange;
}
OnPropertyChanged();
}
}
private Brush _col;
public Brush Col
{
get => _col;
set {
_col = value;
OnPropertyChanged();
}
}
}