就在我认为我已经掌握了 WPF/XAML 和视图模型绑定的时候,我遇到了一个障碍。这是我遇到的问题的简化示例:
考虑以下类:
namespace TestApp
{
public class BandMember
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Band
{
public BandMember[] member = new BandMember[4];
public Band()
{
for (int i= 0; i < 4; i++)
{ member[i] = new BandMember(); }
}
}
public class Modify
{
public static Band SetBandMembers()
{
Band b = new();
b.member[0].FirstName = "John";
b.member[0].LastName = "Lennon";
b.member[1].FirstName = "Paul";
b.member[1].LastName = "McCartney";
b.member[2].FirstName = "Ringo";
b.member[2].LastName = "Starr";
b.member[3].FirstName = "George";
b.member[3].LastName = "Harrison";
return b;
}
}
}
在我拥有的视图模型中
namespace TestApp
{
class ViewModel
{
public Band Beatles { get; set; }
public string Test { get; set; }
public ViewModel()
{
Beatles = new();
Beatles = Modify.SetBandMembers();
Test = "This is the test";
}
}
}
在 XAML 中:
<TextBlock Text="{Binding Beatles.member[3].LastName}"
Grid.Row="0"
Width="200" Height="60"/>
<TextBlock Text="{Binding Test}"
Grid.Row="0"
Width="200" Height="60"/>
我知道视图模型绑定是正确的,因为 {Binding Test} 文本块显示正确。但是尝试绑定到甲壳虫乐队失败了,文本块是空白的。
我在控制台应用程序中尝试了完全相同的事情,使用相同的类并调用在视图模型构造函数中找到的相同代码,并且能够写入披头士乐队成员的值。
当我查看调试跟踪时,我在 VS 中得到的错误说:
<块引用>错误:40:BindingExpression 路径错误:在“对象”“Band”(HashCode=30265903)上找不到“成员”属性。 BindingExpression:Path=Beatles.member[3].LastName; DataItem='ViewModel'