2016-04-19 13 views
0

類似した質問は既に回答済みですhere。違いは私のページUserControl1-UserControl2のために次の構造があることです。c#XAML同じページの他のUserControlからUserControlにアクセスする

私は各項目がUserControl1に基づいているいくつかのListBoxItemsを持つListBoxを持っています。 UserControlも同じページに基づいていますが、そのインスタンスは1つだけです。

私は他のスレッドをリンクとして、私は次の操作を行うことはできません。

私はControl1のコードビハインドの上部にプロパティを導入しました:

public Control2 ctrl2 { get; set; } 

そして、私はControl2のAを与えましたページのXAMLファイルに名前:私がやりたい

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

次のステップは、単に制御1に設定されたプロパティにControl2ののインスタンスを渡すことです。そこで、制御1のインスタンスは、この時点では不明であるので、私は仕事をカント次の操作を行いたいページのコードビハインドでのOnLoadメソッドに:それやっと

Control1.ctrl2 = NameOfControl; 

私はそれぞれから私のUserControl2をにアクセスすることができましたUserControl1のinsatanceが、どのように私はこれを行うのですか?アミンからCOMMENTに応じて

//

ありがとう:

が、これはページのXAMLです:

​​

そして、コードビハインドに私が項目を埋めますwith:

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

あなたはみましたがあります親または子のプロパティを介してナビゲートします。なぜそれらのコントロールにアクセスする必要がありますか? MVVMパターンを使用していますか?役に立つツールは、視覚的なツリーヘルパーになる可能性があります:https://msdn.microsoft.com/en-us/library/system.windows.media.visualtreehelper.aspx –

+0

私は試みたUserControl1のInit()で 'var obj = this.Parent; 'しかし、返される値はnullです。だから、私は親に行く機会がないと思う。 はい、MVVMパターンを使用しています。 – Ulpin

+0

MVVMを使用している場合。なぜあなたはusercontrolsの間に1つのViewModelを共有しないのですか? – Amine

答えて

1

MainPageコードビハインドpu T:

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に

+0

私はそれをやった。しかし、あなたは私の「古い」ビューモデルを何とか破壊したと言っていました。私はそれを上書きしたようなものです。私は次のようにしました: 私のSpecialClassがすでにListBoxItemsにバインドされているときのOnLoadでは、これは:this.DataContext = NameControl2; Box.DataContext = this.DataContext; ' 私のspecialClassもこのDataContextに格納する必要がありますか?しかしどうですか? – Ulpin

+0

this.DataContext = NameControl2を設定する理由MainPageのxamlとcsコードを共有できますか? – Amine

+0

質問が更新されました。もちろん、このコード行は純粋なナンセンスなのでコメントしました – Ulpin

関連する問題