将单例属性绑定到XAML标记

本文关键字:XAML 标记 绑定 单例 属性 | 更新日期: 2023-09-27 18:15:42

首先,让我为关于WPF和绑定的超级新手问题道歉。几天前,我开始对WPF及其在Visual Studio Express 2013中使用XAML标记和c#代码的实现感兴趣,并且我正在尝试将按钮的内容绑定到单个类的一部分属性。显然我不能。

我想做的是:我有一个按钮说"开始",我想,点击,有按钮的内容改变为计时器+停止,像"00:00:02—停止",再次点击,有它变回"开始"。

我有这个类,我已经设计为一个单例,以防止它被实例化不止一次,它包含一个System.Diagnostics.Stopwatch的实例stopwatch,和一个字符串属性,我要么改变为"Start"stopwatch.Elapsed.TotalSeconds.ToString () + "Stop"来回。

问题是,当我试图在XAML标记中引用我的单例类时,像这样(说实话,我真的不知道我在做什么,我只是从我在网上找到的各种例子中启发自己):

<Window
    ...
    xmlns:local="clr-namespace:myNameSpace">
    <Grid>
        <local:mySingleton x:Key="myStringProperty" />
        ...
    </Grid>
</Window>

我得到了一系列编译错误(总共6个),其中一些说:"类型mySingleton不包括任何可访问的构造函数。"answers"Key"属性只能用于包含在"字典"中的元素。"

我不知道该怎么做,我知道我不想让构造函数是公共的(从而摆脱单例的东西)。

有没有指向正确方向的指示?

谢谢大家的帮助

将单例属性绑定到XAML标记

一开始你在显示字符串属性时有问题。你必须使用文本框,然后使用属性进行文本绑定:

<TextBox Text="{Binding Path=myStringProperty}"/>

你还必须将你的类(视图模型)设置为窗口。DataContext和你的属性必须调用OnPropertyChanged事件(参见:WPF: simple TextBox数据绑定)。

现在谈谈单例。单例不应该用于此。你应该有窗口(视图)和窗口工作与一些类(视图模型,你有一个实例每一个窗口),如果你想运行更多的窗口在一起,你总是想要相同的结果,然后在视图模型中,你应该有一些静态对象(它可以是定时器,或一些类,它将处理请求获取结果从定时器将在该类中可以是单例)。所以它可以看起来像Window (view) -> view model class -> static timer/class,它将在自身内部与timer一起工作。