Как связать DataGridColumn.Visibility?
У меня есть проблема, похожая на следующий пост:
Видимость привязки Silverlight DataGridTextColumn
Мне нужно, чтобы столбец в DataGrid Silverlight был видимым / свернутым на основе значения в ViewModel. Для этого я пытаюсь привязать свойство Visibility к ViewModel. Однако вскоре я обнаружил, что свойство Visibility не является DependencyProperty, поэтому оно не может быть связано.
Чтобы решить эту проблему, я попытался создать подкласс своего собственного DataGridTextColumn. С помощью этого нового класса я создал объект DependencyProperty, который в конечном итоге вносит изменения в свойство DataGridTextColumn.Visibility. Это хорошо работает, если я не привязываю данные. В тот момент, когда я связываю данные с моим новым свойством, оно перестает работать, за исключением AG_E_PARSER_BAD_PROPERTY_VALUE.
<code>public class MyDataGridTextColumn : DataGridTextColumn { #region public Visibility MyVisibility public static readonly DependencyProperty MyVisibilityProperty = DependencyProperty.Register("MyVisibility", typeof(Visibility), typeof(MyDataGridTextColumn), new PropertyMetadata(Visibility.Visible, OnMyVisibilityPropertyChanged)); private static void OnMyVisibilityPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var @this = d as MyDataGridTextColumn; if (@this != null) { @this.OnMyVisibilityChanged((Visibility)e.OldValue, (Visibility)e.NewValue); } } private void OnMyVisibilityChanged(Visibility oldValue, Visibility newValue) { Visibility = newValue; } public Visibility MyVisibility { get { return (Visibility)GetValue(MyVisibilityProperty); } set { SetValue(MyVisibilityProperty, value); } } #endregion public Visibility MyVisibility } </code>
Вот небольшой фрагмент XAML.
<code><DataGrid ....> <DataGrid.Columns> <MyDataGridTextColumn Header="User Name" Foreground="#FFFFFFFF" Binding="{Binding User.UserName}" MinWidth="150" CanUserSort="True" CanUserResize="False" CanUserReorder="True" MyVisibility="{Binding Converter={StaticResource BoolToVisibilityConverter}, Path=ShouldShowUser}"/> <DataGridTextColumn .../> </DataGrid.Columns> </DataGrid> </code>
A couple important facts.
The Converter is indeed defined above in the local resources. The Converter is correct, it is used many other places in the solution. If I replace the {Binding} syntax for the MyVisibility property with "Collapsed" the Column does in fact disappear. If I create a new DependencyProperty (i.e. string Foo), and bind to it I receive the AG_E_PARSER_BAD_PROPERTY_VALUE exception too.У кого-нибудь есть идеи относительно того, почему это не работает?