Domanda

Ho un controllo utente in cui l'XAML del controllo può legarsi alle proprietà appropriate dal contesto dei dati del genitore come normale (il contesto dei dati si propaga in xaml).

Ad esempio, ho una finestra il cui DataContext sto impostando su ObjectA per esempio. Il mio controllo utente all'interno della finestra è quindi provare ad accedere alle proprietà in dataContext

Quindi, xaml e il codice dietro la mia finestra possono entrambi vedere un DataContext non nullo.

Il mio controllo a cui si propaga DataContext può vedere un DataContext non nullo in Xaml ma non nel codice dietro.

Qual è il modo corretto di gestirlo?

È stato utile?

Soluzione

in caso contrario, se è necessario verificare se DataContext è impostato, è possibile utilizzare DataContextChanged

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();

        DataContextChanged += new DependencyPropertyChangedEventHandler(UserControl1_DataContextChanged);
    }

    void UserControl1_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        // You can also validate the data going into the DataContext using the event args
    }
}

Nota che non inserirà UserControl1_DataContextChanged fino a quando DataContext non viene modificato da null a un valore diverso.

Non sono sicuro che questo risponda alla tua domanda, ma può essere molto utile da usare in problemi di debug.

Altri suggerimenti

Penso che tu stia controllando 'DataContext' nel costruttore di UserControl. Sarà nullo nel costruttore poiché il controllo utente non è stato ancora creato mentre l'esecuzione è nel codice del costruttore. Ma controlla la proprietà all'evento Loaded vedrai l'oggetto correttamente.

public partial class UserControl1
{
    public UserControl1()
    {
        this.InitializeComponent();

        //DataContext will be null here 
        this.Loaded += new RoutedEventHandler(UserControl1_Loaded);
    }

    void UserControl1_Loaded(object sender, RoutedEventArgs e)
    {
        //Check DataContext Property here - Value is not null
    }
}

Vorrei verificare se si sta verificando un errore di associazione in fase di esecuzione. Aggiungi questo spazio dei nomi al tuo XAML:

xmlns:debug="clr-namespace:System.Diagnostics;assembly=System"

e controlla i messaggi di errore relativi alla finestra Output del debugger.

In alternativa, puoi mostrarci più codice?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top