1

次のコードは、を表示します{Binding text}。スプライトの依存関係プロパティは、テキストの実行ではpropertyvaluechangedを実行しませんが、スプライトの場合は実行しません。

<ItemsControl x:Name="AnswerListBox" ItemsSource="{Binding Answers}" ScrollViewer.VerticalScrollBarVisibility="Disabled" >
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <local:spriteRadioButton Text="{Binding text}" Sprites="{Binding Path=DataContext.UISprites, ElementName=questionField}" GroupName="{Binding Path=DataContext.QuestionTitle, ElementName=questionField}" IsChecked="{Binding selected}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <toolkit:WrapPanel/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

itemspaneltemplateを使用しない場合、プロパティは期待どおりに機能します。

4

1 に答える 1

0

現在、デフォルトの「OneWay」バインディングメカニズムを使用しています。これは、オブジェクトはUIを更新できますが、UIはオブジェクトを更新できないことを意味します。

UIがオブジェクトに変更を通知できるようにするには、バインディングで「TwoWay」バインディングを使用する必要があります。

<DataTemplate>
    <local:spriteRadioButton Text="{Binding text,Mode=TwoWay}" Sprites="{Binding Path=DataContext.UISprites, ElementName=questionField,Mode=TwoWay}" GroupName="{Binding Path=DataContext.QuestionTitle, ElementName=questionField,Mode=TwoWay}" IsChecked="{Binding selected,Mode=TwoWay}" />
</DataTemplate>

これらの変更により、Answersオブジェクトが更新されることに注意してください。Answersオブジェクト自体を変更する場合は、これもTwoWayバインディングとしてマークする必要があります。

于 2011-08-25T08:55:50.520 に答える