Kit de herramientas de la comunidad WPF.Mvvm

prefacio

CommunityToolkit.Mvvm (en lo sucesivo, Toolkit) son los dos marcos más famosos de WPF, uno es Prism y el otro es Toolkit.

Prism puede ver mi explicación detallada de Prism.

Marco detallado de WPF Prims

Kit de herramientas

Documentación oficial del kit de herramientas

Acelere el proceso de desarrollo de MVVM con CommunityToolkit.Mvvm

instalación nuget

inserte la descripción de la imagen aquí

fácil de usar

Toolkit simplemente reescribe nuestros dos métodos de uso común,
uno es SetProperty y el otro es RelayCommand.

SetProperty, notificar actualización

 public class MainViewModel:ObservableObject
 {
    
    
     private string _title;

     public string Title
     {
    
    
         get => _title;
         set => SetProperty(ref _title,value);
     }
 }

Comando Real

public RelayCommand ButtonClickCommand {
    
     get; set; }

public MainViewModel()
{
    
    
    ButtonClickCommand = new RelayCommand(() => {
    
     Debug.WriteLine("Hello World!"); });

}

Resumen de 3 comandos del modo MVVM [2] -RelayCommand

RealyCommand tiene principalmente una propiedad CanExecute. Si se puede hacer clic en la notificación

Puede ejecutar

Si se puede hacer clic en el botón de notificación (me siento un poco de mal gusto)

public class MainViewModel:ObservableObject
{
    
    
    private string _title = "Hello world!";

    public string Title
    {
    
    
        get => _title;
        set => SetProperty(ref _title,value);
    }

    private bool _isEnable = false;

    public bool IsEnable
    {
    
    
        get=> _isEnable;
        set
        {
    
    
            SetProperty(ref _isEnable,value);
            ButtonClickCommand.NotifyCanExecuteChanged();
        }
    }




    public RelayCommand ButtonClickCommand {
    
     get; set; }


    public MainViewModel()
    {
    
    
        ButtonClickCommand = new RelayCommand(() => {
    
     Title = "Value is changed"; },()=>IsEnable);

    }
}
<Window.DataContext>
    <viewModel:MainViewModel />
</Window.DataContext>
<Grid>
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" >
        <TextBox Text="{Binding Title}" Width="200"/>
        <CheckBox Content="Is Enable" IsChecked="{Binding IsEnable}" />
        <Separator Margin="5"/>
        <Button Command="{Binding ButtonClickCommand}" Content="Click Me"/>
    </StackPanel>
</Grid>

inserte la descripción de la imagen aquí

nuevas funciones, generador de código

Toolkit ha agregado una función de generador, que completa automáticamente el código por nosotros.

Propiedad observable

Propiedad observable
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
El atributo Público generado cumple con las siguientes características

  • privado
    • nombre=>Nombre
    • _nombre=>Nombre
    • m_name=>Nombre

Los tres anteriores corresponderán automáticamente al Nombre público.

NotificarCanExecuteChangedFor

Debido a que previamente modificamos CanExecute de RelayCommand para notificar mediante get set en público, ahora podemos usar NotifyCanExecuteChangedFor para notificar

[NotifyCanExecuteChangedFor(nameof(ButtonClickCommand))]
[ObservableProperty]
private bool _isEnable = false;
//等价于
private bool _isEnable = false;

    public bool IsEnable
    {
    
    
        get=> _isEnable;
        set
        {
    
    
            SetProperty(ref _isEnable,value);
            ButtonClickCommand.NotifyCanExecuteChanged();
        }
    }

Comando de retransmisión

RelayCommand proporciona una función de anulación, que generará automáticamente un comando correspondiente e inicializará el comando.

[RelayCommand]
public void ButtonClick()
{
    
    

}
//等价于
public RelayCommand ButtonClickCommand {
    
     get; set; }


public MainViewModel()
{
    
    
    ButtonClickCommand = new RelayCommand(() => {
    
     Title = "Value is changed"; }, () => IsEnable);

}

Otras funciones

//将CanExecute绑定到IsEnable
[RelayCommand(CanExecute =nameof(IsEnable))]
public void ButtonClick()
{
    
    

}
///异步函数也可以,CanExecute会在异步函数结束之后变回去
[RelayCommand(CanExecute =nameof(IsEnable))]
public async Task ButtonClickAsync()
{
    
    
    await Task.Delay(1000);
    Title = "我被修改了";
}

Demostración de función asincrónica: preste atención al color del botón
inserte la descripción de la imagen aquí

Correspondencia

ButtonClickAsync、ButtonClick=>ButtonClickCommand

Notificar propiedad cambiada para

Esperamos que dos atributos estén fuertemente asociados, como Título y TestStr que estén fuertemente asociados.

Queremos poder notificar que otra propiedad ha cambiado, como Título notifica a TestStr de los cambios.

 private string testStr = $"Title:{
      
      Title}";

Pero escribir así informará un error, solo se pueden configurar métodos estáticos
inserte la descripción de la imagen aquí
y luego podemos notificar a través de NotifyPropertyChangedFor.

[ObservableProperty]
[NotifyPropertyChangedFor(nameof(TestStr))]
private string _title = "Hello world!";

public string TestStr => $"Title:{
      
      Title}";

Supongo que te gusta

Origin blog.csdn.net/qq_44695769/article/details/132350216
Recomendado
Clasificación