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 😃