繁体   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