首頁 > 後端開發 > C++ > 如何使用MVVM在WPF畫布上動態添加和定位矩形?

如何使用MVVM在WPF畫布上動態添加和定位矩形?

Patricia Arquette
發布: 2025-01-29 17:41:09
原創
1015 人瀏覽過

How to Dynamically Add and Position Rectangles on a WPF Canvas using MVVM?

使用 MVVM 在 WPF Canvas 上動態添加大小可變的矩形

本文的目標是在 MainWindow 的畫布上渲染多個矩形,而無需在運行時知道它們的精確數量。這需要一種靈活的方法,利用 MVVM 原則。

ViewModel 中的抽象矩形表示

創建一個視圖模型,定義矩形的抽象表示,包括其 x、y 坐標和尺寸的屬性。

<code class="language-csharp">public class RectItem
{
    public double X { get; set; }
    public double Y { get; set; }
    public double Width { get; set; }
    public double Height { get; set; }
}

public class ViewModel : INotifyPropertyChanged
{
    public ObservableCollection<RectItem> RectItems { get; set; } = new ObservableCollection<RectItem>();

    // INotifyPropertyChanged implementation (required for data binding)
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}</code>
登入後複製

帶有 ItemsControl 和 Canvas 的視圖

在 MainWindow 中,創建一個 ItemsControl,其 ItemsPanel 為 Canvas。 ItemsControl 將綁定到視圖模型中的 RectItems 集合。

<code class="language-xml"><ItemsControl ItemsSource="{Binding RectItems}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Rectangle Fill="Black" Height="{Binding Height}" Width="{Binding Width}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="FrameworkElement">
            <Setter Property="Canvas.Left" Value="{Binding X}" />
            <Setter Property="Canvas.Top" Value="{Binding Y}" />
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl></code>
登入後複製

通過這種設置,在畫布上渲染的矩形數量將由視圖模型中 RectItems 的數量決定。隨著視圖模型集合的變化,畫布將自動更新以反映新的矩形。 請注意,為了使數據綁定正常工作,ViewModel需要實現INotifyPropertyChanged接口。 代碼示例中已添加該接口的實現。

通過在 ViewModel 中向 RectItems 集合添加 RectItem 實例,可以在運行時動態添加矩形。

以上是如何使用MVVM在WPF畫布上動態添加和定位矩形?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板