2013-07-05 7 views
5

MyData to klasa po prostu przechowująca właściwość ColorName.Jak uzyskać dostęp do instancji klasy DataContext utworzonej w XAML w codebehind?

w XAML można utworzyć instancję dla mojego XAML datacontext przez

<c:MyData x:Key="myDataSource"> 

Teraz,

Jak uzyskać dostęp i zmienić ColorName przechowywane w tej instancji MyData (który został utworzony w XAML z kluczem "myDataSource") w moim kodzie?

Mam nadzieję, że pytanie jest jasne. Chciałbym programowo zmienić kolor. Jak uzyskać instancję klasy MyData? Dziękuję

<DockPanel 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:c="clr-namespace:SDKSample"> 
    <DockPanel.Resources> 
    <c:MyData x:Key="myDataSource"/> 
    </DockPanel.Resources> 
    <DockPanel.DataContext> 
    <Binding Source="{StaticResource myDataSource}"/> 
    </DockPanel.DataContext> 
    <Button Background="{Binding Path=ColorName}" 
      Width="150" Height="30">I am bound to be RED!</Button> 
</DockPanel> 
+1

Proszę zwrócić uwagę [ moja opinia] (http://stackoverflow.com/a/16991850/643085) na ten temat. –

+0

@HighCore na pewno ciekawy + 1d na ślepo --- jednak biorąc pod uwagę mój obecny poziom kompetencji, nie jestem w stanie wypowiedzieć się w żaden sposób: p Jestem pewien, że będę miał opinię 211 jabłek później –

Odpowiedz

13

Aby uzyskać dostęp do zasobu z opóźnieniem kodu, dając DockPanel nazwę, a następnie:

var resource = dockPanel.Resources["myDataSource"]; 

Alternatywnie, można uzyskać jego DataContext:

var dataContext = dockPanel.DataContext as MyData 
+0

Dziękuję, to zadziałało! –

+2

Twoja "Alternatywa" jest najwyższa –

Powiązane problemy