español - wpf data template
No se puede encontrar el origen del enlace con la referencia ''RelativeSource FindAncestor'' (1)
DataGridTemplateColumn
no es parte del árbol visual o lógico, y por lo tanto no tiene un antecesor vinculante (o cualquier ancestro) por lo que RelativeSource
no funciona.
En su lugar, debe darle al enlace la fuente explícitamente.
<UserControl.Resources>
<local:BindingProxy x:Key="proxy" Data="{Binding}" />
</UserControl.Resources>
<DataGridTemplateColumn Visibility="{Binding Data.IsVisible,
Source={StaticResource proxy},
Converter={StaticResource BooleanToVisibilityConverter}}">
Y el proxy de enlace.
public class BindingProxy : Freezable
{
protected override Freezable CreateInstanceCore()
{
return new BindingProxy();
}
public object Data
{
get { return (object)GetValue(DataProperty); }
set { SetValue(DataProperty, value); }
}
// Using a DependencyProperty as the backing store for Data.
// This enables animation, styling, binding, etc...
public static readonly DependencyProperty DataProperty =
DependencyProperty.Register("Data", typeof(object),
typeof(BindingProxy), new UIPropertyMetadata(null));
}
Esta pregunta ya tiene una respuesta aquí:
Me sale este error:
Cannot find source for binding with reference ''RelativeSource FindAncestor, AncestorType=''System.Windows.Controls.UserControl'', AncestorLevel=''1''''
en este enlace:
<DataGridTemplateColumn Visibility="{Binding DataContext.IsVisible, RelativeSource={RelativeSource AncestorType={x:Type UserControl}},Converter={StaticResource BooleanToVisibilityConverter}}">
ViewModel está sentado como DataContext en UserControl. El DataContext de DataGrid (sentado en UserControl) es propiedad dentro de ViewModel, en ViewModel tengo una variable que dice si mostrar una cierta línea o no, su enlace falla, ¿por qué?
Aquí mi propiedad:
private bool _isVisible=false;
public bool IsVisible
{
get { return _isVisible; }
set
{
_isVisible= value;
NotifyPropertyChanged("IsVisible");
}
}
Cuando se trata de la función: NotifyPropertyChanged el evento PropertyChanged null - significa que no se pudo registrar para el enlace.
Cabe señalar que tengo más enlaces a ViewModel de tal manera que funciona, aquí hay un ejemplo:
Command="{Binding DataContext.Cmd, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"