WPF Binden Fenstertitel in " ViewModel-Eigenschaft
Ich versuche mich zu binden, einen Fenstertitel, um das ViewModel hat eine Title-Eigenschaft. Unten ist das Hauptfenster XAML:
<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>
Wenn ich versuche zu laufen, bekomme ich die folgende Ausnahme "Geben den Wert auf 'System.Windows.StaticResourceExtension' hat eine Ausnahme ausgelöst. Die Zeilennummer und position, zeigen Sie auf die DataContext-Eigenschaft, und die innere Ausnahme, die besagt, "kann Nicht finden die Ressource mit dem Namen mainWindowViewModel.
Unten ist der code für die View-Model:
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
Meine Theorie ist, dass die Ressourcen geladen werden, nachdem der Versuch, zu binden, das Eigentum an der Immobilie. Wenn die exception geworfen wird, die Ressourcen-Eigenschaft für das Fenster ist leer.
Ist die einzige Lösung für den DataContext in der Code-Behind? Kann ich diese zu arbeiten, aber ich würde lieber halten Sie es in XAML.
- Sie konnte immer bewegen Sie Ihre VM-Ressource-app.xaml wenn das zutreffend. Auf einem sidenote bitte name VM-Klassen als
SomethingViewModel
und nicht nur den gleichen Namen wie die Ansicht und die Verwendung von namespace-Klassen zu unterscheiden. Es ist nur wirklich seltsam und freaky - Josh Smith war ein Beispiel dafür will ich sehen, ob ich es lokalisieren können, im Grunde, wenn das datatemplate, das angewendet wurde, die in der XAML-der Titel wurde angewandt, auch..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen, die
DataContext
mithilfe von property-element-syntax:Dass sollte funktionieren, da der xaml-parser ausgeführt wird
StaticResourceExtension
nach den Ressourcen Wörterbuch festgelegt ist.Aber ich denke, dass vielleicht sogar besser wäre, um den DataContext direkt, ohne die Deklaration als Ressource:
<Window.Resources>
, aber die Einstellung der Bindung in der<Window>
warf eine Ausnahme, weil es noch nicht haben Zugang zu den<Window.Resources>
. Einstellung im Fenster-Titel den Weg, den Sie vorgeschlagen wurde eine einfache Problemumgehung. Danke.Etwas spät, aber eine einfache und perfekte Lösung, die ich benutze, nur für den Fall Menschen sind noch auf der Suche nach Möglichkeiten:
Als einfach genug ist, fügen Sie einfach eine Eigenschaft, um Ihre MainViewModel wird der DataContext des MainView etwa so:
Hoffe es hilft..