Элементы добавляются дважды в навигационном приложении - PullRequest
0 голосов
/ 01 июня 2011

У меня есть пользовательский элемент управления Silverlight (4), похожий на сетку данных. Этот элемент управления имеет свойство с именем ColumnConfiguration. При использовании этого элемента управления в приложении Navigation в ColumnConfiguration снова добавляются элементы (через XAML), при этом сохраняются его старые столбцы, в результате чего в элемент управления добавляется вдвое больше обычного количества столбцов.

public ColumnCollection ColumnConfiguration
{
    get { return (ColumnCollection)GetValue(ColumnConfigurationProperty); }
    set { SetValue(ColumnConfigurationProperty, value); }
}

public class ColumnCollection : Collection<ColumnBase> { }

Как я могу предотвратить повторное добавление этих столбцов в элемент управления?

Xaml такой:

<my:Control.ColumnConfiguration>
<my:ColumnTypeA Width="*" MinWidth="50">
</my:ColumnTypeA>
<my:ColumnTypeB Width="2*" MinWidth="50">

</my:ColumnTypeB>
<my:ColumnTypeB Width="2*" MinWidth="50">

</my:ColumnTypeB>
<my:ColumnTypeB Width="*" MinWidth="50">

</my:ColumnTypeB>
<my:ColumnTypeB Width="2*" MinWidth="50">

</my:ColumnTypeB>
</my:Control.ColumnConfiguration>

1 Ответ

2 голосов
/ 04 июня 2011

Может быть, вы указали значение по умолчанию в DependencyProperty UIPropertyMetaData? Поскольку DependencyProperty является статическим, заданное там значение по умолчанию будет одинаковым (справочное) для всех экземпляров вашего элемента управления. Это безвредно при использовании типов значений, но когда ваше свойство является ссылочным типом, вы должны будете установить его начальное значение, используя .ctor() вашего элемента управления (или любой другой способ экземпляра), чтобы создать отдельные начальные значения.

Полагаю, в вашем приложении дважды реализован этот элемент управления, предположительно с использованием MVVM DataTemplate? Первый экземпляр добавит столбцы к статической коллекции ColumnCollection, созданной с использованием значения по умолчанию, и секод также снова будет использовать этот экземпляр.

Вы можете убедиться в этом, посмотрев на значение по умолчанию ToString () вашего ColumnCollection, оно будет содержать хеш-значение для ссылки.

Чтобы решить, просто установите значение по умолчанию для ColumnConfigurationProperty равным нулю.

...