将单例属性绑定到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"属性只能用于包含在"字典"中的元素。"
我不知道该怎么做,我知道我不想让构造函数是公共的(从而摆脱单例的东西)。
有没有指向正确方向的指示?
谢谢大家的帮助
一开始你在显示字符串属性时有问题。你必须使用文本框,然后使用属性进行文本绑定:
<TextBox Text="{Binding Path=myStringProperty}"/>
你还必须将你的类(视图模型)设置为窗口。DataContext和你的属性必须调用OnPropertyChanged事件(参见:WPF: simple TextBox数据绑定)。
现在谈谈单例。单例不应该用于此。你应该有窗口(视图)和窗口工作与一些类(视图模型,你有一个实例每一个窗口),如果你想运行更多的窗口在一起,你总是想要相同的结果,然后在视图模型中,你应该有一些静态对象(它可以是定时器,或一些类,它将处理请求获取结果从定时器将在该类中可以是单例)。所以它可以看起来像Window (view) -> view model class -> static timer/class,它将在自身内部与timer一起工作。