0

いくつかのプロパティを持つApplicationUserというカスタムクラスがあります。ここで重要なのはGivenNameとSurnameです。

ウィンドウのコンストラクターには、_allUsersというリストを返すコードがあります。この呼び出しは成功し、リストには適切な数のApplicationUsersが入力されます

だから私は次のようなことをします:

_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

OKでは、DataContextを全体としてウィンドウの上部にあるコードビハインドに設定する必要があります

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

AllUsersをallUsersを返すパブリックプロパティにします

AllUsersにバインド

 ItemsSource="{Binding Path=AllUsers}"
于 2012-04-14T13:15:10.637 に答える
2

最終的に私にとってそれを解決したのはBindingExpression path error: 'GivenName' property not found on 'object' ''ApplicationUser'エラーメッセージでした!

これはみんなを病気にするでしょうが、私が質問を編集してスクリーンショットを含める準備をしていたので、「爆破されたものにはxとyというプロパティがあり、出力ウィンドウは何を知っているのか!」と私は言いました。オブジェクトApplicationUserが正しく実装されていることを確認したほうがよいでしょう。

案の定、私はプロパティであると思っていたものを公的に変更可能なフィールドとして残しました(!)。私はそれらを自動小道具に変え、それから最初に投稿された私のコードが機能しました。

質問を読み、コメントし、回答を提案してくれたすべての人に謝罪し、感謝したいと思います。この答えをここに残す私の目的は2つあります。同じような状況に陥る可能性のある他の人を助けることと、木のために木が見えない場合は、少し後退します。

于 2012-04-14T15:16:22.743 に答える
1

あなたの問題は、DataContextを割り当てている場所によって引き起こされるタイミングにあると思います。XAMLresovles

ItemsSource="{Binding}"

InitializeComponent()の実行中ですが、リストをiinitしている可能性があり、遅すぎます。

XAMLがビルド/解決されると、comboBoxはバインディングを取得しますが、そこには何もありません。解決する多くの方法:

  1. 最も簡単な方法は、XAMLで実行することです。

  2. DataContextを設定しても、特別なことをしているようには見えません。これは単なるリストであり、本格的なViewModelではありません。

    削除する:

    cboListOfUsers.DataContext = _allUsers;
    

    追加/置換

    cboListOfUsers.ItemsSource = _allUsers;
    

3. InitializeComponent()の前に_allUsersを初期化し、それをDataContextに割り当てます

もう1つの提案-xamlでバインディングをデバッグし、以下を追加します。

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

出力ウィンドウを確認してください。例外がある場合は、私は正しいです。バインディングは解決しようとしますが、そこには何もありません...

私はそれがうまくいくはずだと思います。

また、この投稿をチェックしてください: DataContextとItemsSourceが冗長ではないのはなぜですか?

于 2012-04-13T23:42:08.863 に答える