2015-06-21 64 views
0

我有一個類「裁剪」,它包含4個參數中變化的元素時,調用屬性的設置方法:,物業

public class Cropping 
{ 
    public float Top { get; set; } 
    public float Bottom { get; set; } 
    public float Left { get; set; } 
    public float Right { get; set; } 
} 

在我的UI類,我有種植類的實例,即在set塊中有一個方法調用來更新UI。

private Cropping croppingFactors; 
/// <summary>Stores details on how to crop the image</summary> 
public Cropping CroppingFactors 
{ 
    get { return croppingFactors; } 
    set 
    { 
    croppingFactors = value; 
    UpdateUIControls(); 
    } 
} 

這裏的目的顯然是要更新UI控件,每次的變化來裁剪因素中的一種製成,但是,如果我改變裁剪類中的元素,即,

CroppingFactors.Top = 5; 
呼叫

CroppingFactors屬性的設置方法未運行。

當我更改類內的元素時,如何更新UI?

編輯

我意識到,一套屬性將無法運行,因爲我已經不是一個新的值設置爲裁剪類。 我的問題是:當我更改Cropping類中的任何元素時,如何調用'UpdateUIControls()'方法?

編輯2

多虧了阿蘭穆赫蘭給出的答案 - 這裏是我的完整實現:​​

我修改了裁剪類實現INotifyPropertyChanged類

public class Cropping : INotifyPropertyChanged 
{ 
    private float top; 
    public float Top 
    { 
    get { return top; } 
    set 
    { 
     top = value; 
     NotifyPropertyChanged(); 
    } 
    }  

    //Same for bottom, left and right 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged() 
    { 
    if(PropertyChanged != null) 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

然後在UI類中,我訂閱了這個事件:

public ImgHost() 
{ 
    InitializeComponent(); 
    CroppingFactors.PropertyChanged += CroppingFactors_PropertyChanged; 
} 

private void CroppingFactors_PropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    UpdateUIControls(); 
} 

這就是我的實現,只是爲了完整性。感謝所有的答案!

+0

你有什麼不工作? –

+0

@roryap他修改'CroppingFactors'返回的'Cropping'對象 - 不設置屬性。 – cubrr

+0

「* CroppingFactors屬性的設置方法未運行。*」。當然,它並沒有運行 - CroppingFactors屬性沒有被賦予不同的值,那爲什麼要執行setter?請注意,您將一個不同的值分配給Cropping對象的其中一個屬性,但不會爲CroppingFactors屬性分配不同的值... – elgonzo

回答

3

執行Cropping類中的INotifyPropertyChanged接口。從使用Cropping類的UI類中訂閱屬性更改的事件作爲屬性,以便每次在Cropping類的任何成員上設置屬性時,都可以調用所需的功能。

+0

這是正確的,但我不得不閱讀兩遍,可能會添加示例代碼? –

0

無論何時發生任何變化,您都可以撥打UpdateUIControls(),但這取決於需要觸發更改的內容。另一種方法是添加一個事件:

public event EventHandler PropertyUpdated; 

然後任何需要更新控制列表,可以調用在事件處理程序的控制方法。