2013-10-13 51 views
0

我正在創建一個包含三個屬性的簡單用戶控件。爲了簡單起見,我們假設這些是A,B和C.此外C = A + B。我想在文本框中顯示它們全部(A,B - 用戶可編輯,C - 只讀)。每當用戶修改A或B時,C的值應該被更新。將邏輯添加到WPF中的用戶控件中

我已經在MyControl.xaml.cs文件中爲A和B創建了依賴屬性。

public static readonly DependencyProperty AProperty = 
      DependencyProperty.Register("A", typeof(double), 
      typeof(MyControl), new FrameworkPropertyMetadata(0.0)); 

    public double A 
    { 
     get { return (double)GetValue(AProperty); } 
     set { SetValue(AProperty, value); } 
    } 

    public static readonly DependencyProperty BProperty = 
      DependencyProperty.Register("B", typeof(double), 
      typeof(MyControl), new FrameworkPropertyMetadata(0.0)); 

    public double B 
    { 
     get { return (double)GetValue(BProperty); } 
     set { SetValue(BProperty, value); } 
    } 

我的問題是:我該怎麼處理C以及應該保留其定義?邏輯應該在控件內編碼還是用戶有責任記住這些屬性之間的關係?

回答

2

你應該聲明另一個DependencyPropertyUserControlC並添加屬性更改處理程序應用到AB屬性時,它們的值更改爲更新的C值。這應該做的工作:

public static readonly DependencyProperty AProperty = 
    DependencyProperty.Register("A", typeof(double), 
    typeof(MyControl), new UIPropertyMetadata(0.0, OnAOrBPropertyChanged)); 

public static readonly DependencyProperty BProperty = 
    DependencyProperty.Register("B", typeof(double), 
    typeof(MyControl), new UIPropertyMetadata(0.0, OnAOrBPropertyChanged)); 

public static void OnAOrBPropertyChanged(DependencyObject dependencyObject, 
    DependencyPropertyChangedEventArgs e) 
{ 
    dependencyObject.SetValue(CProperty, (double)dependencyObject.GetValue(AProperty) + 
     (double)dependencyObject.GetValue(BProperty)); 
} 

你可能會喜歡聲明只讀的DependencyProperty查看MSDN上的Read-Only Dependency Properties頁面的幫助。

+0

謝謝!這正是我一直在尋找的。 –

1

您需要再拍依賴屬性爲C也

你可以試試這個:

public static readonly DependencyProperty AProperty = 
      DependencyProperty.Register("A", typeof(double), 
      typeof(MyControl), new FrameworkPropertyMetadata(OnAorBChange)); 

     public double A 
     { 
      get { return (double)GetValue(AProperty); } 
      set { SetValue(AProperty, value); } 
     } 

     public static readonly DependencyProperty BProperty = 
       DependencyProperty.Register("B", typeof(double), 
       typeof(MyControl), new FrameworkPropertyMetadata(OnAorBChange)); 

     public double B 
     { 
      get { return (double)GetValue(BProperty); } 
      set { SetValue(BProperty, value); } 
     } 

     public static readonly DependencyProperty CProperty = 
      DependencyProperty.Register("C", typeof(double), 
      typeof(MyControl), new FrameworkPropertyMetadata(null)); 

     public double C 
     { 
      get { return (double)GetValue(CProperty); } 
      set { SetValue(CProperty, value); } 
     } 

     private static void OnAorBChange(DependencyObject obj, 
      DependencyPropertyChangedEventArgs args) 
     { 
      var obj1 = obj as MyControl; 
      obj1.C = obj1.A + obj1.B; 
     } 

我認爲你做了正確的綁定:)

相關問題