Wpf 修改文本块。窗口中的页面文本

Wpf 修改文本块。窗口中的页面文本,wpf,data-binding,Wpf,Data Binding,我正在尝试更改窗口中文本块的文本。我一直收到NullReferenceException。我该如何解决这个问题 欢迎光临 <TextBlock x:Name="StartNotice" HorizontalAlignment="Left" Margin="247,252,0,0" TextWrapping="Wrap" VerticalAlignment="Top" RenderTransformOrigin="0.595,0.627"

我正在尝试更改窗口中文本块的文本。我一直收到NullReferenceException。我该如何解决这个问题

欢迎光临

        <TextBlock x:Name="StartNotice" HorizontalAlignment="Left" Margin="247,252,0,0"   
        TextWrapping="Wrap" VerticalAlignment="Top" RenderTransformOrigin="0.595,0.627"   
        Text="Say &quot;abracadabra&quot; to start ." FontStyle="Italic" 
        TextAlignment="Center" Foreground="Purple" Width="150"/>
MainWindow.xaml.cs

        try
        {
            myKinect=KinectSensor.KinectSensor[0]; 
        }
        catch
        {
            Welcome welcomePage=(Welcome)this.DataContext();
            welcomePage.StartNotice.Text="Please connect a Kinect";
        }
Welcome welcomePage;

public MainWindow() {...welcomePage = new Welcome(this);}

可以使用MVVM模式轻松修改控件的属性。另一种更好的方法是通过视图模型对其进行更改。

我只是想知道您是在哪里尝试更改“StartNotice”的文本的?…因为据我所知,没有什么比在try{}块中定义StartNotice.text更好的了

我很抱歉没有做出回应。我实施的解决方案描述如下:

我的申请结构如下:

窗口-主窗口 页面-欢迎、登录、菜单、任务

使用“导航到”功能加载页面:

private void navigateTo(Page page) {this.Content=page;} // <this> is MainWindow
欢迎使用.xaml.cs

        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            MainWindow mainWindow=new MainWindow();
            mainWindow.DataContext=this;
            mainWindow.Show();    
        }
MainWindow mainWindow;

public Welcome(MainWindow windowMain)
{
    mainWindow=windowMain;
}
更改StartNotice的内容非常简单:

setupKinect()
{
...StartNotice.Text="Please connect a Kinect";... //used in a try-catch block
}

welcomePage=(Welcome)this.DataContext;已尝试从DataContext中删除参数。仍然引发异常:NullReferenceException未经处理…对象引用未设置为对象的实例。哪行代码导致引发异常?您是否从调试器检查了MainWindow.xaml.cs中的welcomePage对象?应用程序的结构是什么?我想知道为什么当欢迎页面加载时,您会创建一个主窗口,然后在显示主窗口之前将主窗口数据上下文设置到该页面。哪个对象承载页面?MainWindow.xaml.cs中的代码是如何调用的?我断开了Kinect的连接,以便启动catch块。如果我放置MessageBox.Show()而不是尝试更改welcomePage.StartNotice.Text,则一切正常。因为您只是在赋值,所以可以尝试以下代码。Welcome welcomePage=新欢迎();welcomePage.StartNotice.Text=“请连接Kinect”;我将进一步研究MVVM模式。从Channel9的教程开始,MVVM DevReady,但由于我是C#、.NET、WPF新手,并且不得不使用开发文档对Kinect进行编程,所以我没有时间完成一个项目。该应用程序将非常简短,主要集中于运动交互和语音识别,并集成来自RTLS的数据。