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:成人(奥加纳)
因此,当我导入“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();
            }
        }
    }