2

私はWPFを初めて使用しますが、リストボックスコントロールをビューモデルの監視可能なコレクションにバインドすることに精通しています。

私の現在のプロジェクトには、フレームボックス内のさまざまなページに移動するために使用されるリストボックスがあります。最初のListBoxItemに表示情報を追加して、作業中のオブジェクト(この場合はシナリオ)を表示したいと思います(前のフレームで選択され、後続のフレームで表示されます)。ListBox自体は、xamlで定義された静的リストを使用しているため、ViewModel内の何にもバインドされていません。CurrentScenarioは、ViewModelのプロパティです。このリストボックスを含む同じウィンドウにラベルを追加し、CurrentScenario.Idをそのコンテンツに正常にバインドすることができ、正しく更新されたため、Bindingステートメントのパスが正しく解決されるはずです。

<ListBox  
  Style="{StaticResource FunctionBackground}" 
  IsSynchronizedWithCurrentItem="True" 
>
    <ListBoxItem Style="{StaticResource FunctionListBoxItemStyle}">
        <ListBoxItem.ContentTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <TextBlock Grid.Row="0" Text="Scenario" />
                    <TextBlock Grid.Row="1" Text="{Binding Path=CurrentScenario.Id}"/>
                </Grid>
            </DataTemplate>
        </ListBoxItem.ContentTemplate>
    </ListBoxItem>
    <ListBoxItem Style="{StaticResource FunctionListBoxItemStyle}" >Parameter</ListBoxItem>
    <ListBoxItem Style="{StaticResource FunctionListBoxItemStyle}" >Run</ListBoxItem>
    <ListBoxItem Style="{StaticResource FunctionListBoxItemStyle}" >Results</ListBoxItem>
</ListBox>

この追加情報をリストボックスアイテムに追加しようとすると、私が知る限り、リストボックスアイテムのテキストブロックの下に「シナリオ」という単語が含まれる空のテキストブロックがあります。空のテキストボックスのコンテンツにバインドされたプロパティの値が表示されない理由がわかりません。2番目のテキストブロックのTextプロパティに通常の文字列を入力すると、正しく表示されます。

ListBoxItemのコンテンツはItemSourceに関連するプロパティにのみバインドされるように設定されているため、他のものにバインドする試みは無視されるか、WPFに基本的な何かが欠けている可能性があります。または両方...

誰かアイデアがあればありがとう!

4

1 に答える 1

1

したがって、プロパティCurrentScenarioがViewModelにある場合は、RelativeSourceこのプロパティへのバインドに使用できます。

...
<TextBlock Grid.Row="0" Text="Scenario" />
<TextBlock Grid.Row="1" Text="{Binding Path=DataContext.CurrentScenario.Id, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/>
...
于 2013-01-23T16:31:46.633 に答える