Я провел утро, глядя на связанные сообщения, НИ ОДНО из них я нашел адрес точной проблемы, с которой я столкнулся, хотя я узнал немного больше по пути.Как связать видимость столбца datagrid в пользовательском элементе управления wpf?
(с использованием MVVM с пользовательскими элементами управления в WPF)
Сценарием: мне нужно создать многоразовый контроль, который представляет собой DataGrid, который показывает два или три столбца, в зависимости от требований в отношении формы. У меня есть настраиваемый элемент управления, который я уже создал, а также свойство зависимостей для скрытия/отображения этой опции в третьей колонке:
* Примечание: эта видимость зависит полностью от того, к чему я установил свойство, мне это никогда не нужно для изменения в зависимости от выбора в других областях.
public class MyCustomControl: Control
{
public static readonly DependencyProperty DisplayThirdColumnProperty = DependencyProperty.Register(
"DisplayThirdColumn",
typeof(bool),
typeof(MyCustomControl),
new FrameworkPropertyMetadata(false));
static MyCustomControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyCustomControl), new FrameworkPropertyMetadata(typeof(MyCustomControl)));
}
/// <summary>
/// Gets or sets a value indicating whether the the third column should display.
/// </summary>
public bool DisplayThirdColumn
{
get
{
return (bool)this.GetValue(DisplayThirdColumnProperty);
}
set
{
this.SetValue(DisplayThirdColumnProperty, value);
}
}
}
Вот xaml.Generic:
<CheckBoxColumn Binding="{Binding StuffInThirdColumn}"
Header="ThirdColumn"
Visibility="{Binding DisplayThirdColumn,
Converter={StaticResource BooleanToVisibilityConverter},RelativeSource={RelativeSource TemplatedParent}}"/>
Теперь, когда я потребляю контроль:
<MyControls:MyCustomControl DisplayThirdColumn="False"/>
Мои извинения, если мой 'newbieness' показывает, но я что-то отсутствует очевидно здесь? Когда я устанавливаю свойство Visiblity к свернутой явно на контроле xaml.Generic, он правильно скрывает столбец:
<CheckBoxColumn Visibility="Collapsed"..../>
окно Output, кажется, указывает, что не могу найти элемент, чтобы применить его к.
Если я не могу использовать относительный источник, знаете ли вы другой способ, я могу это сделать?
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=DisplayThirdColumn; DataItem=null; target element is 'CheckBoxColumn' (HashCode=19379515); target property is 'Visibility' (type 'Visibility')
Колонка не лежит в одном визуальном дереве, следовательно, не может наследовать DataContext. Вы можете найти решение здесь: http://stackoverflow.com/questions/22073740/binding-visibility-for-datagridcolumn-in-wpf – Aloraman