C#WPF MVVM |添加列表中未显示的新对象

问题描述

我想找到一种将汽车添加到分支机构的方法,如下图所示。

@L_404_0@

当我按下按钮“ Bewaar”(又名“保存”)时,它将存储在数据库中,但是由于未链接到任何“分支”,因此不会在应用程序中显示。我似乎找不到解决方案,尝试更改Car类并尝试在viewmodels中处理一些代码

此图显示查询(从Filiaal中选择*) Show Car in database Branches

图片翻译

  • Filialen =分支机构
  • 子代=分支
  • Naam Bestuurder =名称驱动程序
  • Merk Wagen =品牌车
  • Wagen类型=汽车类型
  • Bewaar =保存
  • Annuleer =取消

下面的代码

AddWagenView.xaml中的组合框代码

<ComboBox
                Grid.Row="0" Grid.Column="1"
                ItemsSource="{Binding Filialen}"
                >
            </ComboBox>

汽车课

namespace EB.bedrijfswagenBeheer.Data
{
    [Table("tblWagens")]
    public class Wagen
    {
        //Fields
        private string _type;
        private string _merk;
        private string _bestuurder;

        //Constructors

        internal Wagen() : this(null,null)
        {

        }
        internal Wagen(int id,string type,string merk)
        {
            Id = id;
            Type = type;
            Merk = merk;
        }

        internal Wagen(int id,string merk,string bestuurder)
        {
            Id = id;
            Type = type;
            Merk = merk;
            Bestuurder = bestuurder;
        }

        public Wagen(String type,String merk) : this(0,type,merk)
        {

        }

        public Wagen(String type,String merk,String bestuurder) : this(0,merk,bestuurder)
        { }



        //Properties
        [Key]
        public int Id { get; set; }
        
        // Elke wagen heeft een type. (Voorbeelden: PickUp,SUV,Coupé,Camionette,...)
        public String Type 
        {
            get { return _type; }
            set { _type = value; }
        }

        // Elke wagen heeft een merk. (Voorbeelden: Citroën,BMW,Volkswagen,Skoda,Mercedes,Audi,...)
        public String Merk
        {
            get { return _merk; }
            set { _merk = value; }
        }

        // Een wagen behoort tot een bestuurder.
        public String Bestuurder
        {
            get { return _bestuurder; }
            set { _bestuurder = value; }
        }

        //Methods
        public override string ToString()
        {
            return $"{Merk} ({Type}) - {Bestuurder}";
        }
    }
}

F节

namespace EB.bedrijfswagenBeheer.Data
{
    [Table("tblFilialen")]
    public class Filiaal
    {
        //Constructors
        internal Filiaal() : this(null)
        {}
        internal Filiaal(int id,string naam)
        {
            Id = id;
            Naam = naam;
            Wagens = new List<Wagen>();
        }
        public Filiaal(String naam) : this(0,naam)
        {}

        //Properties
        [Key]
        public int Id { get; set; }
        public String Naam { get; set; }

        //Lijst van wagens binnenin een filiaal
        public List<Wagen> Wagens { get; set; }

        //Methodes
        //Tonen naam van filialen en de aantaal wagens binnenin het filiaal
        public override string ToString()
        {
            return $"{Naam} (#{Wagens.Count} wagens)";
        }
    }
}

WagenAddviewmodel

namespace EB.bedrijfswagenBeheer.App.viewmodels
{
    class WagenAddviewmodel :  Baseviewmodel
    {
        private bedrijfswagenBeheerRepository _repository;
        private Wagen _addWagen = new Wagen("","");
        private ObservableCollection<Filiaal> _filialen;

        public WagenAddviewmodel(bedrijfswagenBeheerRepository repository)
        {
            _repository = repository;
            _filialen = _repository.GetFilialen();

            SaveCommand = new RelayCommand(SaveChanges);
            CancelCommand = new RelayCommand(CancelChanges);

            Titel = "Add Wagen";
        }

        public ObservableCollection<Filiaal> Filialen
        {
            get { return _filialen; }
            set
            {
                if (_filialen != value)
                {
                    _filialen = value;
                    OnPropertyChanged();
                }
            }
        }


        public Wagen AddWagen
        {
            get { return _addWagen; }
            set
            {
                if (_addWagen != value)
                {
                    _addWagen = value;
                    OnPropertyChanged();
                }
            }
        }


        public event Action<Boolean> ReturnToViewRequested;


        #region SaveCommand
        public RelayCommand SaveCommand { get; private set; }

        public void SaveChanges()
        {
            _repository.AddWagen(AddWagen);
            AddWagen = new Wagen("","");
            ReturnToViewRequested?.Invoke(true);
        }
        #endregion SaveCommand

        #region CancelCommand
        public RelayCommand CancelCommand { get; set; }

        public void CancelChanges()
        {
            AddWagen = new Wagen("","");
            ReturnToViewRequested?.Invoke(false);
        }
        #endregion CancelCommand
    }
}

显示所有汽车的视图(FiliaalDetailViewviewmodel) Image with the right side shown

namespace EB.bedrijfswagenBeheer.App.viewmodels
{
    public class FiliaalDetailViewviewmodel : Baseviewmodel
    {
        //Fields
        private bedrijfswagenBeheerRepository _repository;
        private Wagen _wagen;
        private Filiaal _filiaal;
        private ObservableCollection<Filiaal> _filialen;
        private ObservableCollection<Wagen> _wagens;
        private Wagen _selectedWagen;

        //Constructors
        public FiliaalDetailViewviewmodel(bedrijfswagenBeheerRepository repository)
        {
            _repository = repository;

            Titel = "Wagens";

            DeleteCommand = new RelayCommand(DeleteWagen,CanDeleteWagen);
            EditCommand = new RelayCommand<Wagen>(EditWagen,CanEditWagen);
            AddCommand = new RelayCommand(AddWagen);
        }

        //Add Wagen
        public ObservableCollection<Wagen> Wagens
        {
            get { return _wagens; }
            set
            {
                if (_wagens != value)
                {
                    _wagens = value;
                    OnPropertyChanged();
                }
            }
        }

        public ObservableCollection<Filiaal> Filialen
        {
            get { return _filialen; }
            set
            {
                if (_filialen != value)
                {
                    _filialen = value;
                    OnPropertyChanged();
                }
            }
        }

        //Properties

        public Wagen Wagen
        {
            get { return _wagen; }
            set
            {
                if (_wagen != value)
                {
                    _wagen = value;
                    OnPropertyChanged();
                    Titel = $"Wagen: {Wagen}";
                }
            }
        }
        public Filiaal Filiaal
        {
            get { return _filiaal; }
            set
            {
                if (_filiaal != value)
                {
                    _filiaal = value;
                    OnPropertyChanged();
                    Titel = $"Filiaal: {Filiaal}";
                }
            }
        }
        public Wagen SelectedWagen
        {
            get { return _selectedWagen; }
            set
            {
                if (_selectedWagen != value)
                {
                    _selectedWagen = value;
                    OnPropertyChanged();
                }
            }
        }


        //Methods

        #region AddWagen
        public RelayCommand AddCommand { get; private set; }

        public event Action AddWagenRequested;

        public void AddWagen()
        {
            AddWagenRequested?.Invoke();
        }


        #endregion AddWagen

        public void RefreshFilialen()
        {
            Filialen = _repository.GetFilialen();
        }

        #region DeleteWagen
        public RelayCommand DeleteCommand { get; private set; }

        public void DeleteWagen()
        {
            MessageBoxResult result =  MessageBox.Show($"Zeker dat je '{SelectedWagen.ToString()}' wilt verwijderen?",$"Verwijder Wagen",MessageBoxButton.YesNo,MessageBoxImage.Question);
            if (result == MessageBoxResult.Yes)
            {
                _repository.DeleteWagen(SelectedWagen);
                RefreshFilialen();
                RefreshWagens();
            }
            
        }

        private Boolean CanDeleteWagen()
        {
            return SelectedWagen != null;
        }
        public void RefreshWagens()
        {
            Wagens = _repository.GetWagens();
        }
        
        #endregion DeleteWagen

        #region EditWagen
        public RelayCommand<Wagen> EditCommand { get; private set; }
        public event Action<Wagen> EditWagenRequested;
        public void EditWagen(Wagen wagen)
        {
            EditWagenRequested?.Invoke(wagen);
        }

        public Boolean CanEditWagen(Wagen wagen)
        {
            return wagen != null;
        }

        #endregion EditWagen

    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)