数据绑定属性的工作,但没有更新
我在模型中有属性:数据绑定属性的工作,但没有更新
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; }
}
看到您使用的是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中,输出窗口通常包含有关绑定失败的信息。
输出窗口不包含与SelectionTool数据绑定有关的任何错误。 – Aminion
@Aminion如果保罗是正确的在这里(他是),则输出窗口将不会显示任何错误。您需要通知每个物业。 – BradleyDotNET
你通知SettingTool
的变化,但该属性一直没有改变。这是同一个实例,因此没有变化。
即使您通知更改,WPF也会检查,如果通过比较旧值与当前值(此处为SettingTool
的实例)确实有变化。
- 创建的
EditorSelectionTool
一个新实例,分配此的财产,并通知变化
或
- 实现上每个改变通知物业在
EditorSelectionTool
你的财产应该是公开的。 – ntohl
您绑定到宽度,高度和可见性属性,但在StartSelecting方法中,只更改X和Y属性。我错过了什么吗? – evanb
@ntohl omg,固定,但仍然不工作。 – Aminion