2021-11-30 wpf的mvvm绑定2

主页页面代码

<Grid>
        <TextBox x:Name="First" Width="80" Height="20" 
                 Text="{Binding Value,UpdateSourceTrigger=PropertyChanged}" 
                 Foreground="{Binding BorderColor}"></TextBox>
        <Button x:Name="Second" 
                Width="100" 
                Height="30" 
                HorizontalAlignment="Left" 
                Margin="80,0" 
                Content="按钮"
                Command="{Binding ValueCommand}"
                CommandParameter="123"
                ></Button>
    </Grid>

主页后台代码

 public partial class MainWindow : Window
    {
        MainViewModel mainViewModel = null;
        public MainWindow()
        {
            InitializeComponent();
            mainViewModel = new MainViewModel();
            this.DataContext = mainViewModel;                    
        }
    }

CommandBase定义类代码

 public class CommandBase : ICommand
    {
        public event EventHandler CanExecuteChanged;

        public bool CanExecute(object parameter)
        {
            return DoCanExecute?.Invoke(parameter)==true;
        }

        public void Execute(object parameter)
        {
            DoAction?.Invoke(parameter);
        }
        public Action<object> DoAction { get; set; }
        public Func<object,bool> DoCanExecute { get; set; }

        public void RaiseCanChanged()
        {
            CanExecuteChanged?.Invoke(this, new EventArgs());
        }
    }

ViewModel类代码

public class MainViewModel:INotifyPropertyChanged
    {  
        private string _value="200";
        public string Value
        {
            get { return _value; }
            set { 
                _value = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Value"));
                (this.ValueCommand as CommandBase).RaiseCanChanged();
            }
        }


        private Brush _borderColor=Brushes.Red;

        public event PropertyChangedEventHandler PropertyChanged;

        public Brush BorderColor
        {
            get { return _borderColor; }
            set { _borderColor = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ValueColor"));
            }
        }

        private ICommand _valueCommand;

        public ICommand ValueCommand
        {
            get {
                if (_valueCommand==null)
                {
                    _valueCommand = new CommandBase() { 
                        DoAction = new Action<object>(ValueCommandAction) ,
                        DoCanExecute=new Func<object, bool>(CanExecute)
                    };
                }
                return _valueCommand; }
            set { _valueCommand = value; }
        }
        private void ValueCommandAction(object obj)
        {
            Value = "299";
        }

        private bool CanExecute(object obj)
        {
            return !string.IsNullOrEmpty(Value);
        }
    }

 

posted @ 2021-11-30 17:29  月长生  阅读(41)  评论(0)    收藏  举报