Note that there are some explanatory texts on larger screens.

plurals
  1. POCustom UserControl not Loaded
    text
    copied!<p>I've build WPF MVVM Application with custom user control. I create datatemplate to bind the user control to view model (Dynamically changes via binding). When I run the application the loaded event is not fire but the element in user control is rendered, what's wrong with this ?</p> <p>Datatemplate</p> <pre><code>&lt;DataTemplate DataType="{x:Type viewmodel:MessageListViewModel}"&gt; &lt;view:MessageListView/&gt; &lt;/DataTemplate&gt; &lt;DataTemplate DataType="{x:Type viewmodel:ContactListViewModel}"&gt; &lt;view:ContactListView/&gt; &lt;/DataTemplate&gt; &lt;DataTemplate DataType="{x:Type viewmodel:FeedListViewModel}"&gt; &lt;view:FeedListView/&gt; &lt;/DataTemplate&gt; &lt;DataTemplate DataType="{x:Type viewmodel:FeedViewModel}"&gt; &lt;view:FeedView/&gt; &lt;/DataTemplate&gt; </code></pre> <p>Main.xaml</p> <pre><code>&lt;ContentControl Grid.Row="1" Margin="6" Grid.Column="1" x:Name="moduleContent" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" Content="{Binding Path=Module, ElementName=modulesNavBar}"/&gt; </code></pre> <p>I have 3 module: Message, Contact, and Feed, Suppose the first loaded Module is MessageList</p> <p>MessageListView.xaml.cs</p> <pre><code>public partial class MessageListView: UserControl { public MessageListView() { InitializeComponent(); DataContext = new MessageListViewModel(); Loaded += new RoutedEventHandler(MessageListView_Loaded); } private void MessageListView_Loaded(object sender, RoutedEventArgs e) { MessageBox.Show("Beautiful"); // Not Fired } } </code></pre> <p>MainViewModel.cs</p> <pre><code>public class MainViewModel : ViewModelBase { private string _currentTheme = string.Empty; private object _currentModule = null; private Dictionary&lt;Modules, object&gt; _modules; public string CurrentTheme { get { return _currentTheme; } set { if (_currentTheme != value) { _currentTheme = value; RaisePropertyChanged("CurrentTheme"); } } } public object Module { get { return _currentModule; } set { if (_currentModule != value) { _currentModule = value; RaisePropertyChanged("CurrentModule"); } } } public Dictionary&lt;Modules, object&gt; ModulesCollection { get { return _modules; } private set { _modules = value; RaisePropertyChanged("ModulesCollection"); } } public ViewModelCollection ViewModelCollection { get; private set; } public MainViewModel() { ChangeThemeAction(Theme.MetropolisLightName); ViewModelCollection = new ViewModelCollection(); this._modules = new Dictionary&lt;Modules, object&gt;(); this._modules.Add(Modules.Mails, null); this._modules.Add(Modules.Contacts, null); this._modules.Add(Modules.Feeds, null); this.InitCommands(); } private void InitCommands() { this.ChangeThemeCommand = new RelayCommand&lt;string&gt;(o =&gt; this.ChangeThemeAction(o)); this.ChangeLayoutCommand = new RelayCommand(this.ChangeLayoutAction); this.CloseCommand = new RelayCommand(this.CloseAction); this.OpenContactCommand = new RelayCommand(this.OpenContactAction); this.OpenFeedCommand = new RelayCommand(this.OpenFeedAction); this.OpenMailCommand = new RelayCommand(this.OpenMailAction); } private void ChangeThemeAction(string parameter) { ThemeManager.ApplicationThemeName = parameter; _currentTheme = parameter; } private void ChangeLayoutAction() { } private void CloseAction() { System.Windows.Application.Current.MainWindow.Close(); } private void OpenContactAction() { Module = ModulesCollection[Modules.Contacts]; } private void OpenFeedAction() { Module = ModulesCollection[Modules.Feeds]; } private void OpenMailAction() { Module = ModulesCollection[Modules.Mails]; } #region Commands public ICommand ChangeThemeCommand { get; private set; } public ICommand ChangeLayoutCommand { get; private set; } public ICommand CloseCommand { get; private set; } public ICommand OpenContactCommand { get; private set; } public ICommand OpenFeedCommand { get; private set; } public ICommand OpenMailCommand { get; private set; } public ICommand SendCommand { get; private set; } #endregion } </code></pre> <p>The loaded event is not fired.</p> <p>Thanks in advance,</p> <p>Brian</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload