WPF资源没有加载?

It'*_*ie. 1 c# wpf xaml

好吧,所以我有一些似乎不想工作的XAML.这意味着显示"MainWindowViewModel.Property"的值,但它不会这样做.

一,代码:

MainWindow.xaml:

<Window x:Class="MyNamespace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MyNamespace"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <local:MainWindowViewModel x:Key="ViewModel"/>
    </Window.Resources>
    <Grid>
        <Label Content="{Binding Property, Source={StaticResource ViewModel}}"/>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

MainWindow.xaml.cs:

namespace MyNamespace
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

MainWindowViewModel.cs

namespace MyNamespace
{
    public class MainWindowViewModel
    {
        public string Property = "test";
    }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很正确,但它在运行时不起作用,设计师给了我一个神秘的错误:

PropertyPath
 Property expected
Run Code Online (Sandbox Code Playgroud)

Property绑定中的" ".任何想法为什么会这样?

谢谢!

Grx*_*x70 5

这里的问题是Property你的成员MainWindowViewModel是一个字段而不是一个属性,WPF只支持绑定到属性.所以你的视图模型应该至少看起来像这样:

namespace MyNamespace
{
    public class MainWindowViewModel
    {
        public MainWindowViewModel()
        {
            Property = "test";
        }

        public string Property { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您计划在视图模型的整个生命周期中更改值,您也可以考虑实施INotifyPropertyChanged.