好吧,所以我得到了一些似乎不想工作的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>
MainWindow.xaml.cs:
namespace MyNamespace
{
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
}
}
MainWindowViewModel.cs
namespace MyNamespace
{
public class MainWindowViewModel
{
public string Property = "test";
}
}
这对我来说似乎很正确,但它在运行时并没有起作用,设计师给了我一个神秘的错误:
PropertyPath
Property expected
围绕&#34; Property
&#34;在绑定中。任何想法为什么会这样?
谢谢!
答案 0 :(得分:5)
此处的问题是Property
的{{1}}成员是field而不是property,而WPF仅支持绑定到属性。因此,您的视图模型应至少看起来像这样:
MainWindowViewModel
如果您计划在视图模型的整个生命周期中更改值,您也可以考虑实施INotifyPropertyChanged
。
答案 1 :(得分:2)
而不是
<Window.Resources>
<local:MainWindowViewModel x:Key="ViewModel"/>
</Window.Resources>
我相信你应该这样做:
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
并绑定为:
<Label Content="{Binding Property}"/>
另请注意您的命名空间:
xmlns:local="clr-namespace:MyNamespace"
但你的viewmodel似乎在其他地方
答案 2 :(得分:-1)
试试这个:
在您的ViewModel中按名称属性创建一个属性,如:
private string _property;
public string Property
{
get{ return _property;}
set{ _property = value;}
}
public MainWindowViewModel()
{
Property = "test";
}