我有一个具有以下静态属性的静态类:
public static class PrintingMethods
{
public static String DocsCountString
{
get
{
return printDocuments.Count.ToString();
}
}}
我有一个绑定到此属性的文本框:
<TextBlock Text="{x:Static my:PrintingMethods.DocsCountString}" x:Name="PagesNumber"/>
这有效 - 我可以看到文本中的数字,但它永远不会改变如果属性值改变。
我对此很陌生,我知道有依赖对象和INotify接口这样的东西,但这对静态不起作用。
如果有人可以帮我处理工作代码(修改我写的内容)来实现实时textChange会很棒,谢谢!
答案 0 :(得分:2)
回答我们的意见: 如果使用单例模式,则可以像
那样绑定它public sealed class MySingleton : INotifyPropertyChanged
{
public void RaiseProperty(string aPropName)
{
// implementation of INotifyPropertyChanged
}
public static MySingleton Instance
{
get{ return sInstance; }
}
public string MyProperty
{
get {return mMyProperty;}
set {mMyProperty = value; RaiseProperty("MyProperty"); }
}
private string mMyProperty;
private static MySingleton sInstance = new MySingleton();
}
如您所见,您可以轻松地将INotifyPropertyChanged
接口和实现与单例类一起使用。您可能希望将构造函数设置为private以禁止创建此类的另一个实例。也可以延迟分配MySingleton实例。你会在stackoverflow上找到更多关于单身人士的信息。
<TextBlock Text="{Binding Source={x:Static my:MySingleton.Instance}, Path=MyProperty}"/>
现在重要的部分是绑定和覆盖Source
。通常Binding获取当前DataContext
。通过设置新的Source
,DataContext
无关紧要,新的来源用于获取Path
属性背后的值。
答案 1 :(得分:0)
你应该在修饰语中使用函数是内部的:
窗体2:
internal string foo()
{
return nom;
}
Form1中:
form2 win= new form2();
win.ShowDialog();
Textbox.Text = win.foo();