分配给标签的变量

时间:2012-06-07 18:43:43

标签: wpf xaml c#-4.0

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

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

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

1 个答案:

答案 0 :(得分: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线程而不是后台线程执行的。