Sto tentando di associare un Titolo finestra al ViewModel che ha una proprietà Title. Di seguito è riportato il MainWindow XAML:WPF Bind Window Title to ViewModel Property
<Window x:Class="MyProject.View.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:MyProject.ViewModel;assembly=MyProject.ViewModel"
Title="{Binding Path=Title}" Height="350" Width="525" DataContext="{Binding Source={StaticResource mainWindowViewModel}}">
<Window.Resources>
<vm:MainWindow x:Key="mainWindowViewModel"/>
</Window.Resources>
...
</Window>
Quando provo ad eseguire questo, ottengo il seguente eccezione "Fornire valore 'System.Windows.StaticResourceExtension' ha generato un'eccezione Il numero di riga e la posizione del punto alla proprietà DataContext. e l'eccezione interna indica "Impossibile trovare la risorsa denominata mainWindowViewModel.
Di seguito si riporta il codice per il Model View:
namespace MyProject.ViewModel
{
public class MainWindow : INotifyPropertyChanged
{
#region Fields
private const string TitlebarPrefixString = "My Project";
private string title = TitlebarPrefixString;
public string Title {
get
{
return this.title;
} // End getter
set
{
this.title = value;
OnPropertyChanged("Title");
} // End setter
} // End property
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
} // End if
} // End method
public event PropertyChangedEventHandler PropertyChanged;
} // End class
} // End namespace
La mia teoria è che le risorse vengono caricate dopo il tentativo di legare il titolo alla proprietà. Quando viene generata l'eccezione, la proprietà Resources per la finestra è vuota.
È l'unica soluzione per impostare DataContext nel codice dietro? Posso farlo funzionare, ma preferirei tenerlo in XAML.
puoi sempre spostare la tua risorsa VM su app.xaml se applicabile. Su un sidenote si prega di nominare le classi VM come 'SomethingViewModel' e non solo lo stesso nome della View e utilizzare namespace per differenziare le classi. È davvero strano e spaventoso – Viv
Josh Smith ha avuto un esempio di questo vedrò se riesco a trovarlo, fondamentalmente quando il datatemplate è stato applicato nello XAML anche il titolo è stato applicato .. –