2016-06-30 80 views
0

我現在有一個依賴屬性爲這樣:CollectionPropertiesShouldBeReadOnly和依賴屬性

public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.Register("MyPropertyDefaults", typeof(ICollection<string>), typeof(MyPanel), new PropertyMetadata(new List<string>())); 

public ICollection<string> MyProperty 
{ 
    get 
    { 
     return GetValue(MyPropertyProperty) as ICollection<string>; 
    } 

    set 
    { 
     this.SetValue(MyPropertyProperty, value); 
    } 
} 

的目的是,這個子面板將通過有約束力的傳遞時,此子面板操縱,然後家長可以稍後閱讀。例如。

<xaml:MyPanel MyProperty="{Binding MyPropertyList}" /> 

然而,FxCop的報告CollectionPropertiesShouldBeReadOnly,我需要刪除setter,它是由物業必需的。我該如何解決?什麼是正確的方式來做我正在做的事情?

回答

0

聲明的setter爲私有這樣的:

public class MyPanel : Panel 
{ 
    public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.Register("MyPropertyDefaults", typeof(ICollection<string>), typeof(MyPanel), new PropertyMetadata(new List<string>())); 

    public ICollection<string> MyProperty 
    { 
     get 
     { 
      return GetValue(MyPropertyProperty) as ICollection<string>; 
     } 

     private set 
     { 
      this.SetValue(MyPropertyProperty, value); 
     } 
    } 
} 
+0

不可能的?無法設置屬性「MyPanel.MyProperty」,因爲它沒有可訪問的set訪問器。 – Detritus

+0

可以像這樣工作嗎? – Udo

+0

不,接口需要使用setter才能使用它。我懷疑問題在於我正在使用的集合,我不應該像我一樣直接傳遞集合,而是以其他方式? – Detritus