2016-06-30 3 views
0

Я в настоящее время Dependency Property как таковой:CollectionPropertiesShouldBeReadOnly и Dependency Properties

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 и мне нужно удалить сеттер, который требуется по свойству. Как это исправить? Каков правильный способ делать то, что я делаю?

ответ

0

Объявите сеттера как частные, как это:

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» не может быть установлено, потому что у него нет доступного доступа для доступа. – Detritus

+0

Может ли это работать, как указано выше? – Udo

+0

Нет, интерфейс требует, чтобы сеттер был общедоступным, чтобы использовать его. Я подозреваю, что проблема кроется в коллекции, которую я использую, и мне не следует передавать коллекции напрямую, как я, но каким-то другим способом? – Detritus