2012-12-12 123 views
0

我試圖在MS Paint中複製顏色選擇器對話框的功能。我有一個ViewModel有3個屬性的對話框。圓形屬性參考

  • 公共顏色SelectedColor
    • 這是所選擇的顏色
    • 我結合這對顯示當前所選顏色
  • 公共雙SelectorLeft邊框元件的背景
    • 選擇器在自定義顏色區域的左側位置
    • 我將它綁定到選擇器的左值。選擇器是一個Canvas
    • 畫布的x軸是色調內的元素
  • 公共雙SelectorTop
    • 在自定義顏色區域中的選擇器的頂部位置
    • 我結合這個給選擇器的最高值。選擇器是一個Canvas
    • 中的元素畫布的Y軸是飽和

的問題是,他們都彼此相關。當我從預定義的顏色區域選擇一種顏色時,我需要更新SelectedColor,這反過來應該更新SelectorLeft和SelectorTop,以便自定義顏色區域中的選擇器位於正確的位置。另外,當我在自定義顏色區域中移動選擇器時,我需要更新SelectedLeft和SelectedTop,它們都應該更新SelectedColor。這些關係導致堆棧溢出。

(哈!,在計算器上列出的堆棧溢出的問題)

有另一種方法,我可以解決這個,消除一個屬性上的其他的依賴。或者可能定義不同的屬性來綁定?

謝謝, 馬特

回答

1

一些想法:

  • 使兩個屬性(左,上)只讀的,並且所有的輸入轉換爲第三形式(例如新SelectedColor)以創造新的價值。

  • 使所有屬性爲只讀,並改爲使用SetXXX方法設置新值(這會導致3個屬性中的一個或多個屬性發生更改)。我總是建議儘可能簡單地製作屬性,但副作用最小 - 設置一個屬性不應該導致課程中的其他屬性值發生變化。所以一個SetXXX方法使副作用清晰,並消除了proeprties之間的循環引用。

+0

聽起來不錯,我會試試看。 –

0

做了兩個事件的方法:

UpdateSelectColor - 鼠標點擊事件方法,當你選擇預先設定的

  1. 更新SelectedColor值
  2. 更新SelectorLeft值
  3. 更新SelectorTop值

MoveSelector - 當你移動選擇

  1. 更新SelectedColor值
  2. 更新SelectorLeft值
  3. 更新SelectorTop值
1

不要擡起屬性更改事件如果值是一樣的當前值。這應該防止循環。