簡體   English   中英

從同一頁面上的其他UserControl使用C#XAML訪問UserControl

[英]c# XAML Access UserControl from other UserControl on same page

類似的問題已經在這里回答。 區別在於我的Page-UserControl1-UserControl2具有以下結構:

在頁面上,我有一個帶有多個ListBoxItem的ListBox,而每個Item都基於UserControl1。 UserControl也基於同一Page,但是只有一個實例。

當我鏈接另一個線程時,無法執行以下操作:

我在Control1代碼頂部的后面介紹了一個屬性:

 public Control2 ctrl2 { get; set; }

然后在頁面的xaml文件中為Control2命名:

<local:Control2 Grid.Row="2" x:Name="NameOfControl2"></local:Control2>

我想做的下一步是將Control2的實例傳遞給剛在Control1中設置的屬性。 因此,在頁面后面的代碼中的OnLoad方法中,我想執行以下無法正常工作的操作,因為此時Control1的實例是未知的:

Control1.ctrl2 = NameOfControl;

這樣,我可以從UserControl1的每個實例訪問UserControl2,但是我該怎么做呢?

謝謝

//回應胺的評論:

這是Page的xaml:

        <ListView Grid.Row="1" Margin="0 0 0 5"       
            x:Name = "Box"
            HorizontalAlignment="Center"
            ScrollViewer.VerticalScrollBarVisibility="Auto"
            ContinuumNavigationTransitionInfo.IsEntranceElement="True">
        <ListView.ItemTemplate>
            <DataTemplate>
                <local:UserControl1 x:Name="NameOfControl1" DataContext="{Binding ElementName=Box,Path=DataContext}"/>
            </DataTemplate>
        </ListView.ItemTemplate>
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel VerticalAlignment="Bottom"/>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
    </ListView>

在后面的代碼中,我將項目填充為:

            StandardTweetBox.Items?.Add(MySpecialClass);
            //this.DataContext = NameOfSendControl;
            StandardTweetBox.DataContext = NameOfSendControl;

在MainPage后面的代碼中:

this.DataContext = new YourViewModel();
Box.DataContext = this.DataContext;

並用以下命令替換您的xaml:

<ListView Grid.Row="1" Margin="0 0 0 5"       
            x:Name = "Box"
            HorizontalAlignment="Center"
            ScrollViewer.VerticalScrollBarVisibility="Auto"
            ContinuumNavigationTransitionInfo.IsEntranceElement="True">
        <ListView.ItemTemplate>
            <DataTemplate>
                <local:UserControl1 x:Name="ctrl1name" DataContext="{Binding ElementName=Box,Path=DataContext}"/>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

<local:Control2 Grid.Row="2" x:Name="NameOfControl2" DataContext="{Binding ElementName=Box,Path=DataContext}"></local:Control2>

現在,主頁,usercontrl1和usercontrl2將具有相同的ViewModel

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM