0

我有一个名为 ApplicationUser 的自定义类,它有许多属性。这里重要的是 GivenName 和 Surname。

在窗口的ctor中,我有代码返回一个名为_allUsers的列表。此调用成功,列表中填充了适当数量的 ApplicationUser

所以我然后做类似的事情:

_allUsers = CachingLayer.Get<List<ApplicationUser>>("allUserInformation");
cboListOfUsers.DataContext = _allUsers;

和 XAML:

        <ComboBox Name="cboListOfUsers" ItemsSource="{Binding}" IsEnabled="{Binding Path = IsChecked, ElementName=rbAssignedTo}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock>
                    <TextBlock.Text >
                        <MultiBinding StringFormat=" {0}, {1} ">
                            <Binding Path="Surname" />
                            <Binding Path="GivenName" />
                        </MultiBinding>
                    </TextBlock.Text>
                    </TextBlock>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

但是没有快乐(组合框仍然是空的)

我在这里做错了什么?

4

3 回答 3

2

最终为我解决了它的BindingExpression path error: 'GivenName' property not found on 'object' ''ApplicationUser'错误消息!

这会让每个人都感到恶心,但是当我准备编辑我的问题以包含一些屏幕截图以证明“该死的东西确实有一个名为 x 和 y 的属性以及输出窗口到底知道什么! ”我说我最好检查一下我是否正确地实现了对象 ApplicationUser。

果然我没有,我把我认为的属性作为公共可变字段(!)。我把它们变成了自动道具,然后我最初发布的代码就可以工作了。

我想向所有阅读问题、评论和建议答案的人道歉并感谢他们。我在这里留下这个答案的目的是双重的,以帮助其他可能发现自己处于类似情况的人,并提醒自己,有时如果您看不到树木的树林,那么您可能需要退后一点。

于 2012-04-14T15:16:22.743 回答
2

好的,那么您需要将 DataContext 设置为 Window 顶部的整体代码

   DataContext="{Binding RelativeSource={RelativeSource self}}"

使 AllUsers 成为返回 allUsers 的公共属性

绑定到所有用户

 ItemsSource="{Binding Path=AllUsers}"
于 2012-04-14T13:15:10.637 回答
1

我认为您的问题在于时间问题,这是由您分配 DataContext 的位置引起的。XAML 解析

ItemsSource="{Binding}"

在 InitializeComponent() 期间,但您可能会在之后初始化列表,这为时已晚。

当 XAML 得到构建/解析时,comboBox 采用 Binding,但那里什么都没有。解决方法很多:

  1. 最简单的方法是在 XAML 中进行:

  2. 为什么甚至设置 DataContext,看起来你没有做任何特别的事情,它只是一个列表,而不是一个完整的 ViewModel..

    消除:

    cboListOfUsers.DataContext = _allUsers;
    

    添加/替换为

    cboListOfUsers.ItemsSource = _allUsers;
    

3.在InitializeComponent()之前初始化你的_allUsers,然后将它分配给DataContext

还有一个建议 - 在 xaml 中调试您的绑定,添加:

ItemsSource="{Binding, diagnostics:PresentationTraceSources.TraceLevel=High}"

检查你的输出窗口,如果你有一个异常,那么我是对的,绑定试图解决,但那里什么都没有......

我认为这应该工作..

另外,看看这篇文章: 为什么 DataContext 和 ItemsSource 不是多余的?

于 2012-04-13T23:42:08.863 回答