c# – WPF将窗口标题绑定到ViewModel属性
发布时间:2020-12-15 04:20:26 所属栏目:百科 来源:网络整理
导读:我试图将窗口标题绑定到具有Title属性的ViewModel.下面是MainWindow 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" xmln
我试图将窗口标题绑定到具有Title属性的ViewModel.下面是MainWindow 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> 当我尝试运行它,我得到以下异常“提供值System.Windows.StaticResourceExtension”抛出一个异常.行号和位置指向DataContext属性,内部异常状态“找不到名为mainWindowViewModel的资源. 以下是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 我的理论是在试图将标题绑定到属性之后加载资源.抛出异常时,Window的Resources属性为空. 是唯一的解决方案来设置DataContext在代码背后吗?我可以让这个工作,但我宁愿把它保存在XAML. 解决方法
您可以尝试使用属性元素语法设置DataContext:
<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"> <Window.Resources> <vm:MainWindow x:Key="mainWindowViewModel"/> </Window.Resources> <Window.DataContext> <StaticResourceExtension ResourceKey="mainWindowViewModel"/> </Window.DataContext> 这应该在xaml解析器将在资源字典设置完成后执行StaticResourceExtension. 但是我认为甚至可以直接设置DataContext,而不将其声明为资源: <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"> <Window.DataContext> <vm:MainWindow x:Key="mainWindowViewModel"/> </Window.DataContext> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |