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); } }