Я следую этому ответу, но когда я закомментирую контейнер
<tly:MyDataGridHelper.HiddenCols>
<!-- <tly:LabelCollection> -->
<Label Name="SomeProp"/>
<Label Name="DisplayName"/>
<!--</tly:LabelCollection> -->
</tly:MyDataGridHelper.HiddenCols>
и я меняю только имя строки, переданной на RegisterAttached
public static readonly DependencyProperty HiddenColsProperty =
DependencyProperty.RegisterAttached("HiddenColsInternal", typeof(LabelCollection), typeof(MyDataGridHelper), new PropertyMetadata
{
PropertyChangedCallback = (obj, e) =>
{
var grid = (DataGrid)obj;
if (grid != null) {
var arr = ((LabelCollection)e.NewValue).Cast<Label>().ToArray();
hidden[grid.Name] = (arr ?? new Label[0]).Select(l => l.Name).ToArray();
}
}
});
но если мне нужно инициализировать коллекцию в геттере
public static LabelCollection GetHiddenCols(DependencyObject obj)
{
var collection = (LabelCollection)obj.GetValue(HiddenColsProperty);
if (collection == null) {
collection = new LabelCollection();
obj.SetValue(HiddenColsProperty, collection);
}
return collection;
}
то мои значения (например, мои имена меток: "SomeProp
" и "DisplayName"
) теряются. Что я делаю неправильно? Как я должен их получить?
На данный момент мой обходной путь - сохранить конверт <tly:LabelCollection>
(и в этом случае все работает)
LabelCollection
? - person gleng   schedule 13.11.2017HiddenCols
, вам придется зарегистрировать его с этим именем, а также предоставить статические методы получения и установкиGetHiddenCols
иSetHiddenCols
. Все остальное — взлом, создающий больше проблем, чем необходимо. - person Clemens   schedule 13.11.2017PropertyMetadata
? Ваш код кажется неполным - person Il Vic   schedule 13.11.2017