Laden...

Parameter von viewModel zu einen anderen View übertragen und es dann im MVVM viewDetailModel nutzen.

Letzter Beitrag vor einem Jahr 4 Posts 669 Views
Parameter von viewModel zu einen anderen View übertragen und es dann im MVVM viewDetailModel nutzen.

Hi

Ich möchte gerne die Parameter einer anderen View im detailView nutzen, für eine Datagrid Abfrage.

DetailDispoView

ArtikelOderSkuEbene artikelOderSku = null;
        string filter = "";

        public DetailDispoView(ArtikelOderSkuEbene artikelOderSkuEbene, string filter)
        {
            InitializeComponent();

            this.artikelOderSku = artikelOderSkuEbene;
            this.filter = filter;
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            DetailDispoViewModel detailDispoViewModel = new DetailDispoViewModel(artikelOderSku, filter);
        }

DetailDispoViewModel

IAzManagerRepository azManagerRepository = new AzManagerRepository();
        public ObservableCollection<ArticleDetails> FilterArticleDetails { get; set; } = new ObservableCollection<ArticleDetails>();

        private ObservableCollection<ArticleDetails> _articleDetails = new ObservableCollection<ArticleDetails>();
        public ObservableCollection<ArticleDetails> ArticleDetails
        {
            get => _articleDetails;
            set
            {
                if (_articleDetails != value)
                {
                    _articleDetails = value;
                    this.RaisePropertyChanged();
                }
            }
        }

        private ICollectionView _filterCollection;
        public ICollectionView FilterCollection
        {
            get { return _filterCollection; }
            set
            {
                _filterCollection = value;
                this.RaisePropertyChanged();
            }
        }
        private string _headerGroupBox;
        public string HeaderGroupBox
        {
            get { return _headerGroupBox; }
            set
            {
                _headerGroupBox = value;
                RaisePropertyChanged();
            }
        }

        public DetailDispoViewModel()
        {

        }

        public DetailDispoViewModel(ArtikelOderSkuEbene artikelOderSkuEbene, string filter)
        {
            //False für Artikelansicht
            ArticleDetails = azManagerRepository.GetArticleDetails(artikelOderSkuEbene.mention_article_nr_1);
            FilterCollection = CollectionViewSource.GetDefaultView(ArticleDetails);
            HeaderGroupBox = "Artikel (" + ArticleDetails.Count.ToString() + ")";
            //SetOverlay(false);
        }

Die Daten werden auch im  FilterCollection geholt aber im DataGrid nicht angezeigt.

Wenn ich nur einen DetailDispoViewModel Konstrucktor verwende funktioniert alles super.

Was ist das Problem und wie kann ich es ändern ???

MainDispoViewModel

private void DoubleCommand(object o)
        {
            var selectedRow = o as ArtikelOderSkuEbene;
            DetailDispoView detailDispoView = new DetailDispoView(selectedRow, Filter);
            detailDispoView.Show();
        }

Hallo,

was soll denn die Zeile im Windows_Loaded-Ereignis bewirken?

Du mußt schon den DataContext setzen, s.a. [Artikel] MVVM und DataBinding  (unter "2.2 Instanziierung des ViewModels").

Ich verstehe auch nicht, wieso du dies nicht direkt im Konstruktor setzt? Am besten wäre sogar mittels Dependency Injection (DI) direkt das ViewModel als Parameter zu übergeben (anstatt dessen Parameter und dieses dann zu erzeugen).

Edit: Und bzgl. deinem 2. Beitrag solltest du von einem ViewModel nicht direkt auf eine View zugreifen (bzw. diese von dort öffnen). Besser ist es einen Service dafür zu nutzen, s. z.B. die Antwort in C# – WPF Open a new View from the ViewModel.

Hi

Danke geht jetzt wieder. Werde jetzt den Service einbauen und die Dependency Injection.

Ich weiß jetzt was zu tun ist 😃