C# 创建新窗口时出现DataContext问题

C# 创建新窗口时出现DataContext问题,c#,wpf,C#,Wpf,我有一个问题,我相信这很容易解决,但我就是无法正确地获取数据上下文 我有一个带有组合框(CMBConnel)的弹出窗口。当您关闭弹出窗口时,主窗口将打开,并在txtChannel中显示从该组合框中选择的值 在弹出窗口(点击按钮可随时弹出)中,我检查主窗口是否已打开,然后打开或不执行任何操作: Popup.xaml.cs //Check to see if MainWindow has been created yet if (App.Current.MainWindow != null &am

我有一个问题,我相信这很容易解决,但我就是无法正确地获取数据上下文

我有一个带有组合框(CMBConnel)的弹出窗口。当您关闭弹出窗口时,主窗口将打开,并在txtChannel中显示从该组合框中选择的值

在弹出窗口(点击按钮可随时弹出)中,我检查主窗口是否已打开,然后打开或不执行任何操作: Popup.xaml.cs

//Check to see if MainWindow has been created yet
 if (App.Current.MainWindow != null && App.Current.MainWindow.GetType() == typeof(MainWindow))
 {
     this.Close();
 }
 else
 {
      //main Window hasn't been created yet so create it!
      MainWindow main = new MainWindow() { DataContext = this };
      App.Current.MainWindow = main;
      this.Close();
      main.Show();
            }
var mainwin = App.Current.Windows.OfType<MainWindow>().SingleOrDefault(w => w.IsActive);
mainwin.DataContext = this; //Set again just in case
//检查是否已创建MainWindow
if(App.Current.MainWindow!=null&&App.Current.MainWindow.GetType()==typeof(MainWindow))
{
这个。关闭();
}
其他的
{
//主窗口尚未创建,请创建它!
MainWindow main=new MainWindow(){DataContext=this};
App.Current.MainWindow=main;
这个。关闭();
main.Show();
}
var mainwin=App.Current.Windows.OfType().SingleOrDefault(w=>w.IsActive);
mainwin.DataContext=this//再放一次以防万一
我确保设置主窗口的DataContext

这是我的弹出组合框:
很简单

所以现在,在我的主窗口中,我想我所要做的就是:

<Label x:Name="txtChannel" Content="{Binding Path=SelectedValue, ElementName=cmbChannel}" HorizontalAlignment="Left" Margin="80,171,0,0" VerticalAlignment="Top" Width="58" />


但这是行不通的。我很确定这是一个数据上下文问题,也许我没有正确地声明它?不确定。感谢您的帮助

是的,一开始我错了

我想,当您关闭弹出窗口时,它的所有元素都被释放了。我建议您将cmbChannel的SelectedValue绑定到Popup DataContext,然后执行我之前写的操作:

<ComboBox x:Name="cmbChannel" 
          ItemsSource="{Binding CmbContent}" 
          SelectedItem="{Binding SelectedEntry}" />

是的,一开始我错了

我想,当您关闭弹出窗口时,它的所有元素都被释放了。我建议您将cmbChannel的SelectedValue绑定到Popup DataContext,然后执行我之前写的操作:

<ComboBox x:Name="cmbChannel" 
          ItemsSource="{Binding CmbContent}" 
          SelectedItem="{Binding SelectedEntry}" />

在你的情况下,“这”是什么?即,第一个代码块位于何处?这指的是我的弹出窗口。该代码块在我的popup.xaml.cs中抱歉,这不起作用!此外,ElementName=cmbChannel在主窗口的可视树中搜索此元素。但CMB频道在您的数据上下文中。试试这个:。但我不能百分之百肯定这会起作用。在你的情况下,“这”是什么?即,第一个代码块位于何处?这指的是我的弹出窗口。该代码块在我的popup.xaml.cs中抱歉,这不起作用!此外,ElementName=cmbChannel在主窗口的可视树中搜索此元素。但CMB频道在您的数据上下文中。试试这个:。但我不能百分之百肯定这会奏效
MainWindow main = new MainWindow() { DataContext = this.DataContext };