Newsgroup: it.comp.lang.visual-basic
Titolo: [WPF] Binding proprietà IsEnabled per un controllo contenuto in una DataGridTemplateColumn

Salve a tutti,
ci ho sbattuto la testa in mille modi ma non sono riuscito a risolvere la cosa.
Ho una DataGrid in cui vi sono varie colonne di tipo DataGridTemplateColumn.
In alcune di esse ho dei controlli che devono essere disabilitati ad una determinata condizione.
Premesse utili:
1-La DataGrid viene popolata legandola ad una ObservableCollection(Of classemia). Quindi ho DataGridMia.ItemsSource = MiaObservableCollection
2-Il DataContext del Form ï¿œ invece legato ad un Dictionary(Of String, String) che contiene la parte riguardante la traduzione del software.
Ora veniamo al problema.
Da XAML ho che:
</DataGridTemplateColumn>
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <Grid HorizontalAlignment="Center">
 	<Grid.ColumnDefinitions>
	  <ColumnDefinition Width="16" />
	  <ColumnDefinition Width="*" />
	</Grid.ColumnDefinitions>
 
	<Image Source="{Binding Icona}" Width="16" Height="16" Grid.Column="0"/>
	<CheckBox x:Name="chkPK" Grid.Column="1"
	          IsChecked="{Binding Path=PK, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
		  ***** ISTRUZIONE CHE NON FUNZIONA *****
	          IsEnabled="{Binding Path=IsEditEnabled, ElementName=frmSottStrut, Mode=OneWay}"
		  ***************************************
 />
      </Grid>
    </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Da Code Behind ho:
Private _IsEditEnabled As Boolean = False
Public ReadOnly Property IsEditEnabled As Boolean
    Get
        Return _IsEditEnabled
    End Get
End Property
Inoltre ho anche in una funzione
_IsEditEnabled = False
OnPropertyChanged("IsEditEnabled")
Come potete notare, chiamo anche la OnPropertyChanged, quindi il form implementa giï¿œ INotifyPropertyChanged
Ora non mi spiego perchï¿œ tutti i controlli presenti nel form effettivamente si abilitano o disabilitano al cambiamento della proprietï¿œ IsEditEnabled ad eccezione di quelli inclusi nelle colonne della DataGrid.
Come posso disabilitare anche quelli?
Grazie a chi mi potrï¿œ aiutare.
Nicola

Nicola Ottomano pretended :

Probabilmente perchï¿œ il datacontext degli items della grid ï¿œ diverso, 
anzichï¿œ utilizzare ElementName prova ad usare RelativeSource risalendo 
il visualtree fino a quando raggiungi la Window.
HTH

 Probabilmente perchï¿œ il datacontext degli items della grid ï¿œ diverso, anzichï¿œ utilizzare ElementName prova ad usare RelativeSource risalendo il visualtree fino a quando raggiungi la Window.
Grazie Corrado,
effettivamente seguendo il tuo consiglio sono riuscito a prendere la proprietï¿œ del form.
A futura memoria, il codice usato ï¿œ:
IsEnabled="{Binding Path=IsEditEnabled,  RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Mode=OneWay}" />
Lo XAML diventa quindi:
</DataGridTemplateColumn>
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <Grid HorizontalAlignment="Center">
 	<Grid.ColumnDefinitions>
	  <ColumnDefinition Width="16" />
	  <ColumnDefinition Width="*" />
	</Grid.ColumnDefinitions>
 
	<Image Source="{Binding Icona}" Width="16" Height="16" Grid.Column="0"/>
	<CheckBox x:Name="chkPK" Grid.Column="1"
	          IsChecked="{Binding Path=PK, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
		  ***** ISTRUZIONE FUNZIONANTE *****
	          IsEnabled="{Binding Path=IsEditEnabled,  RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Mode=OneWay}" />
