3

私はここで困惑しています。ビジネス オブジェクトを保持する監視可能なコレクションがあります。ListBox の ItemsSource にバインドしています。オブジェクトの X と Y を更新していますが、アイテムの上部と左側にバインドされているため、実行時に UI に正しく表示されています。しかし、ここで問題が発生します。また、いくつかのデータをテキストブロックのテキスト プロパティに表示するようにバインドしましたが、データは初期値のみを表示します。何度変更しても、テキストブロック Text は更新されません。

ここに XAML があります。XAML に問題がある場合は、お知らせください。私が言ったように、X/Y - Top/Left バインディングは問題なく機能し、変更すると更新されますが、DisplayData にバインドされている TextBlock はそうではありません。

また、コレクション内のビジネス オブジェクトは INotifyPropertyChanged を実装します。

XAML を見ただけでは答えが得られない場合は、これを再現する小さなデモを作成しようとします。

<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="614" Width="674">

<ListBox Name="PlottingBox" Background="White">

    <ListBox.ItemTemplate>

        <DataTemplate>

            <TextBlock Text="{Binding Path=DisplayData}" />

        </DataTemplate>

    </ListBox.ItemTemplate>

    <ListBox.Template>

        <ControlTemplate TargetType="{x:Type ListBox}">

            <Border Background="{TemplateBinding Background}"

                BorderBrush="{TemplateBinding BorderBrush}"

                BorderThickness="{TemplateBinding BorderThickness}">

                <Canvas IsItemsHost="True" />

            </Border>

        </ControlTemplate>

    </ListBox.Template>

    <ListBox.ItemContainerStyle>

        <Style TargetType="{x:Type ListBoxItem}">

            <Setter Property="Canvas.Left" Value="{Binding Path=PlotX}" />

            <Setter Property="Canvas.Top" Value="{Binding Path=PlotY}" />

         </Style>

    </ListBox.ItemContainerStyle>

</ListBox>

4

3 に答える 3

1

INotifyPropertyChangedUI に変更が通知され、更新して新しい値を反映できるように、ビジネス オブジェクトはインターフェイスを実装する必要があります。

于 2009-08-31T22:15:48.237 に答える
0

うーん、ListBox 内の DataContext は ItemsSource リストの項目です。

たとえば、ListBox が ObservableCollection にバインドされている場合、ListBox 内の DataContext は Person オブジェクトであり、親のデータコンテキストではありません。

バインディングを持つ TextBlock がある場合、バインディングは Person オブジェクト、つまり、parentDC.DisplayData ではなく personInstance.DisplayData を指します。

ItemsSource がないと動作がわかりません。

ご存知かもしれませんが、参考になるかもしれません。

于 2009-08-31T23:08:24.683 に答える