none
DataContext an Objekt übergeben RRS feed

  • Frage

  • Hallo!

    Irgendwie klappt die Syntax nicht.

    Ich habe eine DP definiert:

    namespace AnrufListe
    {
    ...
        public partial class ReportFenster : Window
        {
            private static readonly DependencyProperty Farbe_ControlPanelProperty = DependencyProperty.Register("Farbe_ControlPanel", typeof(Brush), typeof(ReportFenster), new PropertyMetadata(bruFarbe_ControlPanel));
    
            public Brush Farbe_ControlPanel
            {
                get { return (Brush)GetValue(Farbe_ControlPanelProperty); }
                set { SetValue(Farbe_ControlPanelProperty, value); }
            }
    	...

    In XAML binde ich diese DP an eine Property:

    <Border Background="{Binding Farbe_ControlPanel}" >


    Wenn ich den DataContext an das Fenster binde, wird die DP-Farbe angezeigt:

    <Window x:Name="wndReport" x:Class="AnrufListe.ReportFenster"
            ...
            xmlns:local="clr-namespace:AnrufListe"
            DataContext="{Binding RelativeSource={RelativeSource Self}}">
    

    Nun möchte ich den DataContext nicht an das gesamte Fenster übergeben, sondern nur an das Objekt, das die DP benutzen soll, dies ist mir aber noch nicht gelungen :-(

    <Border Background="{Binding Farbe_ControlPanel}" DataContext="{local:ReportFenster}">
    

    Dienstag, 8. Januar 2019 15:23

Antworten

  • Hi,
    Deine DependencyProperty befindet sich im Window, wo sie auch genutzt werden soll (kein MVVM). Damit diese Window-Instanz als DataContext wirksam wird, brauchst Du sie nur in der gewünschten Ebene zuzuweisen, z.B. so:

    <Window x:Name="wndReport" x:Class="WpfApp1.Window86"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp1"
            mc:Ignorable="d"
            Title="Window86" Height="450" Width="800"
            DataContext="{Binding RelativeSource={RelativeSource Self}}">
      <Grid>
        <Border Background="{Binding Farbe_ControlPanel}"
                DataContext="{Binding ElementName=wndReport}"
                BorderThickness="5" BorderBrush="Red"
                Width="100" Height="100">
        </Border>
      </Grid>
    </Window>


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP für Developer Technologies)
    Meine Homepage mit Tipps und Tricks


    • Als Antwort vorgeschlagen Peter Fleischer Dienstag, 8. Januar 2019 20:13
    • Bearbeitet Peter Fleischer Dienstag, 8. Januar 2019 20:13
    • Als Antwort markiert perlfred Mittwoch, 9. Januar 2019 07:42
    Dienstag, 8. Januar 2019 20:10

Alle Antworten

  • Hi,
    Deine DependencyProperty befindet sich im Window, wo sie auch genutzt werden soll (kein MVVM). Damit diese Window-Instanz als DataContext wirksam wird, brauchst Du sie nur in der gewünschten Ebene zuzuweisen, z.B. so:

    <Window x:Name="wndReport" x:Class="WpfApp1.Window86"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp1"
            mc:Ignorable="d"
            Title="Window86" Height="450" Width="800"
            DataContext="{Binding RelativeSource={RelativeSource Self}}">
      <Grid>
        <Border Background="{Binding Farbe_ControlPanel}"
                DataContext="{Binding ElementName=wndReport}"
                BorderThickness="5" BorderBrush="Red"
                Width="100" Height="100">
        </Border>
      </Grid>
    </Window>


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP für Developer Technologies)
    Meine Homepage mit Tipps und Tricks


    • Als Antwort vorgeschlagen Peter Fleischer Dienstag, 8. Januar 2019 20:13
    • Bearbeitet Peter Fleischer Dienstag, 8. Januar 2019 20:13
    • Als Antwort markiert perlfred Mittwoch, 9. Januar 2019 07:42
    Dienstag, 8. Januar 2019 20:10
  • Hallo Peter!

    So konsequent hatte ich dann auch nicht gedacht.

    Da das DP in der Fensterklasse deklariert wird und ich im XAML auf die Fensterinstanz (wndReport) direkt zugreifen kann, kann ich dem DataContext eines Objektes (auch ohne! dass die Fensterinstanz separat einen DataContext zugeordnet bekommt) die Fensterinstanz zuordnen.

    <Window x:Name="myWindow" ...  (ohne DataContext)>
      ...
      <myFWObjekt myProperty="{Binding myDP}"
                DataContext="{Binding ElementName=myWindow}" ... />
    </Window>

    Vielen! Dank! für die Lösung und die logische Erklärung!!!!!!

    Fred.


    • Bearbeitet perlfred Mittwoch, 9. Januar 2019 09:10
    Mittwoch, 9. Januar 2019 09:08