数据绑定属性的工作,但没有更新

数据绑定属性的工作,但没有更新

问题描述:

我在模型中有属性:数据绑定属性的工作,但没有更新

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

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

你射击了一个名为SelectionTool属性的属性更改事件。然而,你从来没有在高度和可视性上解雇属性更改事件。

在某些情况下,这将起作用 - 这取决于是否有某物实际上与SelectionTool绑定。在这种情况下,它会迫使绑定进一步“下降”以重新加载。但是由于您遇到问题,我认为这不适用于您的特定绑定方案。

在Visual Studio中,输出窗口通常包含有关绑定失败的信息。

+0

输出窗口不包含与SelectionTool数据绑定有关的任何错误。 – Aminion

+0

@Aminion如果保罗是正确的在这里(他是),则输出窗口将不会显示任何错误。您需要通知每个物业。 – BradleyDotNET

你通知SettingTool的变化,但该属性一直没有改变。这是同一个实例,因此没有变化。

即使您通知更改,WPF也会检查,如果通过比较旧值与当前值(此处为SettingTool的实例)确实有变化。

  1. 创建的EditorSelectionTool一个新实例,分配此的财产,并通知变化

  1. 实现上每个改变通知物业在EditorSelectionTool
开始=>