2015-07-21 89 views
0

我在模型中有屬性:數據綁定屬性的工作,但沒有更新

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; } 
} 
+0

你的財產應該是公開的。 – ntohl

+0

您綁定到寬度,高度和可見性屬性,但在StartSelecting方法中,只更改X和Y屬性。我錯過了什麼嗎? – evanb

+0

@ntohl omg,固定,但仍然不工作。 – Aminion

回答

1

看到您使用的是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); 
     } 
    } 
} 
2

你射擊了一個名爲SelectionTool屬性的屬性更改事件。然而,你從來沒有在高度和可視性上解僱屬性更改事件。

在某些情況下,這將起作用 - 這取決於是否有某物實際上與SelectionTool綁定。在這種情況下,它會迫使綁定進一步「下降」以重新加載。但是由於您遇到問題,我認爲這不適用於您的特定綁定方案。

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

+0

輸出窗口不包含與SelectionTool數據綁定有關的任何錯誤。 – Aminion

+0

@Aminion如果保羅是正確的在這裏(他是),則輸出窗口將不會顯示任何錯誤。您需要通知每個物業。 – BradleyDotNET

1

你通知SettingTool的變化,但該屬性一直沒有改變。這是同一個實例,因此沒有變化。

即使您通知更改,WPF也會檢查,如果通過比較舊值與當前值(此處爲SettingTool的實例)確實有變化。

  1. 創建的EditorSelectionTool一個新實例,分配此的財產,並通知變化

  • 實現上每個改變通知物業在EditorSelectionTool