2012-06-07 46 views
1

我正在使用C#创建一个WPF接口。显示屏显示移动物体的当前坐标。我正在做的是触发一个间隔的线程,调用一个函数来检查移动对象的当前位置。分配给标签的变量

注意:检查当前位置的函数是从其他类(在不同的.cs文件中)调用的,而且我的界面位于另一个窗口中,它是主窗口。

如何显示窗口界面中的坐标?有没有办法将一个类(.cs)中初始化的变量赋值给接口(.xaml)中的另一个标签工具栏?

回答

0

要做到这一点,最简单的方法是添加一对夫妇的TextBlock S(或TextBox如果你喜欢),并将它们绑定到一个属性上的视图模型:

<TextBlock Text="{Binding Path=XCord}" /> 

诀窍是,既然你”重新使用计时器或后台线程,您必须同步属性更改通知,以便它们发生在您的UI线程上。所以,你可以实现XCord属性,如:

public string XCoord 
    { 
     get { return _xcoord; } 
     set 
     { 
      if(!Application.Current.Dispatcher.CheckAccess()) 
      { 
       Application.Current.Dispatcher 
        .BeginInvoke(new Action(() => 
              { 
               _xcoord = value; 
               NotifyPropertyChanged("XCoord"); 
              })); 
      } 
      else 
      { 
       _xcoord = value; 
       NotifyPropertyChanged("XCoord"); 
      } 
     } 
    } 

此检查的与Dispatcher以确保你没有尝试设置从错误的线程的属性,如果你是,它使用BeginInvoke做的工作在UI线程上。这样,当PropertyChanged事件触发,并且绑定尝试读取值并更改UI时,它会从UI线程而非后台线程执行此操作。