WPF Weitergabe der Daten-Objekt aus der Main-Anwendung UI zum user control

Ich habe Benutzer-Steuerelementen definiert, die zum darstellen der Inhalt der Registerkarte Elemente so aufgeteilt, eine große XAML-Datei in kleinere Dateien. Ich möchte zu übergeben Referenz auf ein Datenobjekt von der Haupt-UI-Klasse für den Benutzer steuert.

Ich verstehe, dass DependancyProperties und RelativeSource sind Wege, dies zu erreichen, bin aber nicht sicher, wie Sie Sie umsetzen, durch meine mangelnde WPF-know-how. Kann mir jemand helfen.

Dank

Habe ich drei xaml-Dateien MainWindow, AlsTabUC (UserControl) und RangingTabUC (UserControl). Ich habe ein einzelnes Objekt, ein Gerät führt, dass sowohl die Reichweite als auch Umgebungslicht-Messung und wojuld wie die Durchführung dieser Tätigkeiten, die in separaten tabs.

Objekt m_mySensorDevice ist ein Mitglied der "MainWindow", die die Muttergesellschaft und die ich gerne weitergeben möchte dieses Objekt, um die beiden Kinder, so dass Sie ausführen können, readAmbientLight und readRange Methoden.

Natürlich, ich habe sehr basic-Beispiel-code für die Abbildung. In Wirklichkeit sind diese Registerkarten enthalten viel mehr Informationen (zusammen mit anderen Registerkarten) und damit den Grund für die Bedienelemente.

MainWindow - XAML

    <Window.Resources>
        <System:String x:Key="strTabHeaderRanging">Ranging</System:String>
        <System:String x:Key="strTabHeaderALS">ALS</System:String>
    </Window.Resources>
    <Grid>
        <TabControl Name="MainTab" TabStripPlacement="Top"
                    Margin="0,20,0,10"
                    SelectionChanged="mainTab_SelectionChanged" >
            <TabItem Name="tabItemRanging"
                     Header="{Binding Source={StaticResource strTabHeaderRanging}}">
            <Grid>
                <my:rangingTabUC HorizontalAlignment="Center"
                                 VerticalAlignment="Center"
                                 x:Name="rangingTabUC1"/>
            </Grid>
            </TabItem>
            <TabItem Name="tabItemAls"
                  Header="{Binding Source={StaticResource strTabHeaderALS}}">
                <Grid>
                    <my:AlsTabUC HorizontalAlignment="Center"
                                 VerticalAlignment="Center"
                                 x:Name="alsTabUC1" /> 
                </Grid>
            </TabItem>
        </TabControl>
    </Grid>
</Window>

MainWindow - Code

public partial class MainWindow : Window
{
    SensorDevice m_mySensorDevice;
    public MainWindow()
    {
        m_mySensorDevice = new SensorDevice();
        InitializeComponent();
    }
    private void mainTab_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
    }
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {

    }
}

public class SensorDevice
{
}

AlsTabUC - XAML

<UserControl x:Class="TabUserControls.AlsTabUC">
    <Grid>
        <Button Height="25" Width="100" Name="readAmbientLight"
                HorizontalAlignment="Center"  VerticalAlignment="Center"
                Click="readAmbientLight_Click" Margin="2">
            Read Amb Light
        </Button>
    </Grid>
</UserControl>

AlsTabUC - Code

public partial class AlsTabUC : UserControl
{
    public AlsTabUC()
    {
        InitializeComponent();
    }

    private void readAmbientLight_Click(object sender, RoutedEventArgs e)
    {
        m_mySensorDevice.readAmbientLight();
    }
}

rangingTabUC - XAML

<UserControl x:Class="TabUserControls.rangingTabUC">
    <Grid>
        <Button Height="25" Width="100" Name="readRange"
                HorizontalAlignment="Center"  VerticalAlignment="Center"
                Click="readRange_Click" Margin="2">
            Read Range
        </Button>  
    </Grid>
</UserControl>

rangingTabUC - Code

public partial class rangingTabUC : UserControl
{
    public rangingTabUC()
    {
        InitializeComponent();
    }

    private void readRange_Click(object sender, RoutedEventArgs e)
    {
        m_mySensorDevice.readRange();
    }
}
  • poste den relevanten code und XAML. Auch die hierarchische Beziehung zwischen den Ansichten in WPF in der Regel manifestiert sich auf der ViewModel-Ebene, nicht auf die View-Ebene. Dies ist, in einem MVVM ViewModel-First-Ansatz.
  • Ich habe den code und die XAML-Code, wie verlangt. Danke.
  • Ich sehe keinen DataContext definiert hier also werde ich nur den folgenden Rat: Sie können einfach verwenden Sie die geerbte DataContext vom MainWindow in Ihrem UserControl und dann rufen Sie die Methoden auf, wie normal.
InformationsquelleAutor user1400716 | 2013-06-09
Schreibe einen Kommentar