簡體   English   中英

數據綁定到屬性有效,但無法更新

[英]Databinding to property is working, but not updating

我在模型中有屬性:

private EditorSelectionTool SelectionTool { get; set; }

捆綁:

 <DataTemplate DataType="{x:Type viewModels:EditorSelectionTool}">
                    <Rectangle Stroke="White" StrokeThickness="1" StrokeDashArray="4 4" Width="{Binding Width}" Height="{Binding Height}" Visibility="{Binding Visibility}"/>
                </DataTemplate>

模型是從PropertyChangedBase類(Caliburn.Micro)派生的

以及更改屬性字段的方法:

 public void StartSelecting(Point point)
    {
        SelectionTool.X = point.X;
        SelectionTool.Y = point.Y;
        NotifyOfPropertyChange(() => SelectionTool);
    }

調試顯示該方法已被調用。 但是,UI的更改並未發生。

SelectionTool類:

   public class EditorSelectionTool
{
    public double X { get; set; }
    public double Y { get; set; }
    public double Width { get; set; }
    public double Height { get; set; }
    public Visibility Visibility { get; set; }
}

您將在名為SelectionTool的屬性上觸發屬性更改事件。 但是,您從未在“高度和可見性”上觸發屬性更改事件。

在某些情況下,這會起作用-這取決於是否確實將某些東西綁定到SelectionTool。 在這種情況下,它將迫使綁定進一步“下降”以重新加載。 但是由於您遇到問題,我認為這不適用於您的特定綁定方案。

在Visual Studio中,輸出窗口通常包含有關綁定失敗的信息。

看到您正在使用Caliburn.Micro,您將需要更新EditorSelectionTool來實現PropertyChangedBase並如Paul K所述,向每個屬性添加屬性更改通知。

public class EditorSelectionTool : PropertyChangedBase 
{
    private double _x;
    private double _y;
    private double _width;
    private double _height;
    private Visibility _visibility;

    public double X
    {
        get { return _x; }
        set
        {
            _x = value;
            NotifyOfPropertyChange(()=> X);
        }
    }

    public double Y
    {
        get { return _y; }
        set
        {
            _y = value;
            NotifyOfPropertyChange(() => Y);
        }
    }

    public double Width
    {
        get { return _width; }
        set
        {
            _width = value;
            NotifyOfPropertyChange(() => Width);
        }
    }

    public double Height
    {
        get { return _height; }
        set
        {
            _height = value;
            NotifyOfPropertyChange(() => Height);
        }
    }

    public Visibility Visibility
    {
        get { return _visibility; }
        set
        {
            _visibility = value;
            NotifyOfPropertyChange(() => Visibility);
        }
    }
}

您在SettingTool上通知了更改,但是該屬性完全沒有更改。 這是同一實例,因此沒有任何變化。

即使您通知了更改,WPF也會通過將舊值與當前值(此處為SettingTool的實例)進行比較來檢查是否確實存在更改。

  1. 創建的新實例EditorSelectionTool ,這個分配的財產和更改通知

要么

  1. EditorSelectionTool 每個屬性上實施更改通知

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM