0
votes

WPF Comment effacer le contenu de la zone de texte dans ListView à l'aide de MVVM

J'utilise ci-dessous Code et MVVM Observable, mais «Effacer» Button Not efface le contenu des zones de texte.

Ce que je dois faire ici?

< Strong> mainwindow.xaml xxx

mainwindow.xaml.cs xxx

myViewModel.cs xxx


1 commentaires

Si vous ne créez toujours qu'une nouvelle instance de collection (comme dans la réponse acceptée), il n'est pas nécessaire d'utiliser Observablecollection. Une liste simple fonctionnerait également.


3 Réponses :


-4
votes

Ceci fonctionne à mon application

Affichage: P>

public class MachineViewModel : ViewModelBase
{

    #region  public statments Textbox text

    //Public statments to get textbox text
    public string MachineID { get; set; }

    public string CustomerID { get; set; }

    public string CustomerName { get; set; }

    public string City { get; set; }

    public string Country { get; set; }
    public string PartName { get; set; }
    public string PartNumber { get; set; }
    public string Project { get; set; }

    public string SpindleC1 { get; set; }

    public string SpindleC2 { get; set; }

    public string HoningHead { get; set; }

    public string NCVersion { get; set; }

    public string HMIVersion { get; set; }

    public string HRIVersion { get; set; }

    public string AHSVersion { get; set; }
    #endregion

    //DialogService
    private IDialogService _dialogService;

    //Operation button for save, update, delete, selection changed and print
    public ICommand SaveCommand { get; private set; }
    public ICommand UpdateCommand { get; private set; }
    public ICommand DeleteCommand { get; private set; }
    public ICommand ClearCommand { get; private set; }
    public ICommand SelectionChangedCommand { get; set; }

    //observable collection for machine model
    public ObservableCollection<Machine> DataContext { get; set; }

    private Machine machineSelectedItem;
    public Machine MachineSelectedItem
    {
        get { return machineSelectedItem; }
        set { machineSelectedItem = value; }
    }

    public object MachineDataGrid { get; set; }


    public List<MachineClient> cmbclientDetails;

    //PRWContext for general use
    private PRWContext context = new PRWContext();

    public MachineViewModel()
    {
        //Commands for save, update, delete and print
        SaveCommand = new RelayCommand(() => ExecuteSaveCommand());
        UpdateCommand = new RelayCommand(() => ExecuteUpdateCommand());
        DeleteCommand = new RelayCommand(() => ExecuteDeleteCommand());
        ClearCommand = new RelayCommand(() => ExecuteClearCommand());
        SelectionChangedCommand = new RelayCommand(() => ExecuteSelectionChangedCommand());

        //Load the data from PRW Database to datagrid
        LoadData();

        //Normelly done with dependency injection
        _dialogService = new DialogService();
    }



    //execute save
    private void ExecuteSaveCommand()
    {
        Machine machine = new Machine
        {
            //Machine data
            MachineID = MachineID,
            CustomerID = CustomerID,
            CustomerName = CustomerName,
            City = City,
            Country = Country,

            //Part data
            PartName = PartName,
            PartNumber = PartNumber,
            Project = Project,

            //Serial data
            SpindleC1 = SpindleC1,
            SpindleC2 = SpindleC2,
            HoningHead = HoningHead,

            //Softwareversion data
            NCVersion = NCVersion,
            HMIVersion = HMIVersion,
            HRIVersion = HRIVersion,
            AHSVersion = AHSVersion
        };

        context.Machines.Add(machine);
        context.SaveChanges();

        ClearContent();
    }

    //execute update
    private void ExecuteUpdateCommand()
    {
        Machine machine = context.Machines.FirstOrDefault(w => w.MachineID == MachineID);

        machine.CustomerID = CustomerID;
        machine.CustomerName = CustomerName;
        machine.City = City;
        machine.Country = Country;
        machine.PartName = PartName;
        machine.PartNumber = PartNumber;
        machine.Project = Project;
        machine.SpindleC1 = SpindleC1;
        machine.SpindleC2 = SpindleC2;
        machine.HoningHead = HoningHead;
        machine.NCVersion = NCVersion;
        machine.HMIVersion = HMIVersion;
        machine.HRIVersion = HRIVersion;
        machine.AHSVersion = AHSVersion;

        context.Machines.AddOrUpdate(machine);
        context.SaveChanges();
        ClearContent();
    }

    //execute delete
    private void ExecuteDeleteCommand()
    {
        if (machineSelectedItem != null)
        {
            var dialog = new YesNoDialogViewModel("Question", "Your are Sure to Delete the Record?");
            var result = _dialogService.OpenDialog(dialog);
            if (result == DialogResults.Yes)
            {
                Machine machine = context.Machines.FirstOrDefault(w => w.MachineID == MachineID);
                context.Machines.Remove(machine);
                context.SaveChanges();
                ClearContent();
            }
        }
        else
        {
            var dialog = new AlertDialogViewModel("Attention", "Please select a Record!");
            var result = _dialogService.OpenDialog(dialog);
            Console.WriteLine(result);
        }

    }

    //execute clear
    private void ExecuteClearCommand()
    {
        ClearContent();
    }

    // Execute selection changed
    private void ExecuteSelectionChangedCommand()
    {
        if(machineSelectedItem != null)
        {
            MachineID = machineSelectedItem.MachineID?.ToString() ?? "";
            CustomerID = machineSelectedItem.CustomerID?.ToString() ?? "";
            CustomerName = machineSelectedItem.CustomerName?.ToString() ?? "";
            City = machineSelectedItem.City?.ToString() ?? "";
            Country = machineSelectedItem.Country?.ToString() ?? "";
            PartName = machineSelectedItem.PartName?.ToString() ?? "";
            PartNumber = machineSelectedItem.PartNumber?.ToString() ?? "";
            Project = machineSelectedItem.Project?.ToString() ?? "";
            SpindleC1 = machineSelectedItem.SpindleC1?.ToString() ?? "";
            SpindleC2 = machineSelectedItem.SpindleC2?.ToString() ?? "";
            HoningHead = machineSelectedItem.HoningHead?.ToString() ?? "";
            NCVersion = machineSelectedItem.NCVersion?.ToString() ?? "";
            HMIVersion = machineSelectedItem.HMIVersion?.ToString() ?? "";
            HRIVersion = machineSelectedItem.HRIVersion?.ToString() ?? "";
            AHSVersion = machineSelectedItem.AHSVersion?.ToString() ?? "";
        }
        else
        {
            machineSelectedItem = null;
        }


    }

    //Load data from database to grid
    private void LoadData()
    {
        context.Machines.Load();
        this.DataContext = context.Machines.Local;
    }

    //Clear textboxes
    private void ClearContent()
    {
        MachineID = string.Empty;
        CustomerID = string.Empty;
        CustomerName = string.Empty;
        City = string.Empty;
        PartName = string.Empty;
        PartNumber = string.Empty;
        Project = string.Empty;
        Country = string.Empty;
        SpindleC1 = string.Empty;
        SpindleC2 = string.Empty;
        HoningHead = string.Empty;
        NCVersion = string.Empty;
        HMIVersion = string.Empty;
        HRIVersion = string.Empty;
        AHSVersion = string.Empty;
    }
}


3 commentaires

Comment nom d'utilisateur et mot de passe venant ici? Pourriez-vous s'il vous plaît poster votre code complet?


J'utilise foreach (var c dans _Credentials) {C.Artame = string.empty; c.password = string.empty; }


Mon contexte est différent. J'ai Textbox Inside ListView and ListView est lié avec Observables. Cela ne fonctionnera pas



2
votes

Critiques Propriété EM> a une notification sur le changement de Setter: xxx pré>

Donc, si vous devez modifier cette collection, utilisez propriété em>, pas _Credentials champ em> p>

pas _credentials = Nouvelle Observablecollection (données); code>, mais P>

private void ClearTextBox()
{
    var data = new List<Credential> { new Credential { UserName = "", Password = "" } };
    Credentials = new ObservableCollection<Credential>(data);
    MessageBox.Show("clear done!");
}


0 commentaires

1
votes

L'utilisation de la propriété de références au lieu du champ Crédentials est obligatoire. Mais vous n'avez pas à attribuer une nouvelle observation complète. Il suffit d'effacer l'ancien et ajoutez un nouvel objet de références.

private void ClearTextBox()
{
    Credentials.Clear();
    Credentials.Add(new Credential { UserName = "", Password = "" });
    MessageBox.Show("clear done!");
}


1 commentaires

Si vous utilisez la propriété de références comme celle-ci, vous n'avez même pas besoin de déclencher une notification de changement. Il pourrait simplement s'agir d'une propriété lisonly comme Observablecollection publique Critings {Obtenir; } = Nouvelle Observablecollection ();