Próbuję powiązać tytuł okna z obiektem ViewModel, który ma właściwość Tytuł. Poniżej znajduje się MainWindow XAML:Tytuł okna powiązania pliku WPF do właściwości ViewModel
<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>
Kiedy próbuję uruchomić to pojawia się następujący wyjątek „Podaj wartość na«System.Windows.StaticResourceExtension»zwrócił wyjątek numer linii i pozycja kropki do właściwości DataContext. , a wewnętrzny wyjątek stwierdza "Nie można znaleźć zasobu o nazwie mainWindowViewModel.
Poniżej znajduje się kod dla widoku modelu:
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
Moja teoria jest taka, że zasoby są ładowane po próbie związania tytuł do nieruchomości. Po wygenerowaniu wyjątku właściwość Resources dla okna jest pusta.
Czy jedynym rozwiązaniem jest ustawienie DataContext w polu Behind? Mogę to uruchomić, ale wolałbym zachować go w XAML.
zawsze możesz przenieść swój VM do pliku app.xaml, jeśli to ma zastosowanie. W sidenote nazwij klasy VM jako 'SomethingViewModel', a nie tylko tę samą nazwę, co przestrzeń View i use, aby rozróżnić klasy. To jest po prostu dziwne i dziwaczne – Viv
Josh Smith miał przykład tego, zobaczę, czy mogę go zlokalizować, w zasadzie, gdy datatemplate został zastosowany w XAML, tytuł został zastosowany też. –