2014-12-04 85 views
1

請解釋控制和ContentControl之間的實際差異,因爲使用谷歌搜索沒有產生好的結果。Silverlight/WPF中的Control和ContentControl有什麼區別?

其實,我現在面臨與此相關的一個問題: 我有一個Autocompletebox控制繼承ContentControl中)。對於用戶輸入的新值,相應Property的Mode = TwoWay工作正常,Property的值在ViewModel中得到更新,如果用戶輸入另一個新值,則相同的重複。但是如果用戶再次輸入先前輸入的值,則屬性值不會被更新。

所以我想這可能是這個Autocompletebox控制應該從Control類而不是ContentControl中繼承。

我是否正確?,請添加您的輸入和反饋。

編輯 - 添加僞代碼::

控制類: -

public class MyAutoBox : ContentControl 
{ 
    public int MyProp 
    { 
     get { return (int)GetValue(MyPropProperty); } 
     set { SetValue(MyPropProperty, value); } 
    } 

    public static readonly DependencyProperty MyPropProperty = 
     DependencyProperty.Register("MyProp", typeof(int), typeof(MyAutoBox), new PropertyMetadata(0)); 

} 

視圖模型: -

public class MyViewModel : ViewModelBase, INavigationAware 
{ 
    private int MyProp; 

    public int MyProp 
    { 
     get { return MyProp; } 
     set 
     { 
      if (MyProp != value) 
      { 
       MyProp = value; 
       RaisePropertyChanged(() => MyProp); 
      } 
     } 
    } 

} 

的XAML:

<MyControls:MyAutoBox Grid.Row="1" 
        Grid.Column="0" 
        Margin="10,0" 
        CanTypeIn="True" 
        MyProp="{Binding MyProp, Converter={StaticResource NullToNumericConverter},Mode=TwoWay}" 
<MyControls/> 

謝謝。

+0

它不是MS自動完成框。這是由我們開發的自定義控件,它繼承自ContentControl。 – xpertprogrammer 2014-12-04 15:16:42

回答

1

ContentControl實際上是從Control類繼承而來的。所以這個問題並沒有因此而出現。當屬性值真的改變時,Property Changed機制將起作用。如果新值和舊值相等,則不需要更新ViewModel。

除此之外,Control類是WPF中大多數UI元素的基類。它擁有像背景,前景,字體等屬性。

ContentControl是一個類,它表示一個元素,它可以接受單個項目作爲子項目。例如,ListBoxItem,ComboBoxItem等是ContentControls。

+0

我會舉一個例子,讓我說我輸入了100,然後刪除它;然後輸入200,300,所以......直到這一點,它對每個這些值都正常工作。但是,如果我再次重複之前輸入的任何值,請說200,那麼此時Property不會發生變化;由於我的viewmodel屬性值沒有得到更新。希望解釋。 – xpertprogrammer 2014-12-04 14:00:44

+0

@ xpertprogrammer如果你能在一些最小的例子代碼中重現問題,它將會有很大的幫助。 – McGarnagle 2014-12-04 19:16:14

+0

@McGarnagle雖然我無法爲您提供一個可用的示例應用程序(因爲它需要所有支持類,DLL等),但我正在爲類和xaml提供僞代碼並更新我的問題。請看看並建議。 – xpertprogrammer 2014-12-05 07:00:05