WPF DataContextProxy w sekcji zasobów

Mam problem z używaniem DataContextProxy w mojej aplikacji WPF. Kiedy umieszczam DataContextProxy w sekcji Zasoby siatki, nigdy nie jest ładowana. Jeśli przeniosę DataContextProxy z sekcji zasobów, wszystko działa poprawnie.

Badam to od pewnego czasu i próbowałem wielu metod debugowania aplikacji.

Umieściłem DebugConverter na kontrolce, z którą próbuję korzystać z serwera proxy. Konwerter debugowania nigdy nie jest wywoływany.

Użyłem WPFSnoop, aby sprawdzić, czy są jakieś błędy wiązania. Otrzymuję następujący błąd wiązania w DataContextProxy,

Błąd System.Windows.Data: 3: Nie można znaleźć elementu, który dostarcza DataContext. BindingExpression: (bez ścieżki); DataItem = null; elementem docelowym jest 'Proxy' (Name = ''); właściwość target to „DataContext” (wpisz „Object”)

Umieściłem punkt przerwania na załadowanym zdarzeniu mojego DataContextProxy. Załadowane zdarzenie nigdy nie jest wywoływane i umieściłem punkt przerwania w zdarzeniu DataContextChanged, które nigdy nie jest wywoływane.

Oto przykładowy kod do zademonstrowania tego. Oczywiście wiem, że tak naprawdę nie muszę używać DataContextProxy na TextBox.

<code><Window x:Class="WpfDataContextProxyBug.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfDataContextProxyBug"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <local:DebugConverter x:Key="DebugConverter"/>
    </Window.Resources>
    <Grid>
        <Grid.Resources>
            <local:Proxy x:Key="Proxy" DataContext="{Binding}" />
        </Grid.Resources>

    <TextBox DataContext="{Binding Path=Name, Source={StaticResource Proxy}, Converter={StaticResource DebugConverter}}"/>
    </Grid>
</Window>
</code>

Klasa DataContextProxy

<code>public class Proxy : FrameworkElement
{
    public Proxy()
    {
        Loaded += DataContextProxy_Loaded;
        DataContextChanged += Proxy_DataContextChanged;
    }

    void Proxy_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
    {

    }

    void DataContextProxy_Loaded(object sender, RoutedEventArgs e)
    {

    }

}
</code>

questionAnswers(1)

yourAnswerToTheQuestion