0

ObservableCollectionをcanvasにバインドするのに問題があります。

XAML:

<ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible">
    <local:DesignerCanvas x:Name="designerCanvas"  AllowDrop="True">
        <ItemsControl ItemsSource="{Binding Circles}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
        <Button Canvas.Left="452" Canvas.Top="487" Content="Button" Height="23" Name="button1" Width="75" Click="button1_Click" />
    </local:DesignerCanvas>
</ScrollViewer>

注:DesignerCanvasは、Canvasから派生した単なるクラスです。MeasureOverride関数をオーバーライドして、適切なサイズに変更し、scrollviewerが表示されるようにしました。

コードビハインド:

public partial class LogicView : UserControl
{
    private ObservableCollection<Shape> circles;
    public ObservableCollection<Shape> Circles 
    {
        get { return circles; }
        set { circles = value; }
    }
    ...

    public void DrawCircle()
    {
        Ellipse ellipse = new Ellipse();

        SolidColorBrush brush = new SolidColorBrush(Brushes.Blue.Color);
        ellipse.Fill = brush;
        ellipse.StrokeThickness = 2;
        ellipse.Stroke = Brushes.Black;

        ellipse.Width = 100;
        ellipse.Height = 100;

        DesignerCanvas.SetLeft(ellipse, 100);
        Circles.Add(ellipse);
    }
}

DrawCircle関数は、ObservableCollectionに楕円を追加しますが、キャンバスには何も表示されません。バインディングが正しく機能していないようです。何が問題になる可能性がありますか?

4

1 に答える 1

1

Caliburn Micro を使用している場合は、

ItemsSource="{Binding Circles}" 

Name="Circles" 

あなたの問題を解決します

于 2012-09-25T08:10:28.240 に答える