C# 视图模型数据绑定

时间:2021-07-02 22:05:41

标签: c# wpf xaml

就在我认为我已经掌握了 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'

0 个答案:

没有答案