[英]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
的實例)進行比較來檢查是否確實存在更改。
EditorSelectionTool
,這個分配的財產和更改通知 要么
EditorSelectionTool
每個屬性上實施更改通知
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.