访问控制&x27;C#WPF中另一个类的s属性
我在班级之间的可视性上搞得一团糟。请帮我回答这个新手问题 我有两个控件(来自默认WPF工具箱的日期选择器),它们位于不同的窗口中,因此位于不同的类中。我可以从其本机类(即在其本机窗口)中轻松访问这些控件属性,如访问控制&x27;C#WPF中另一个类的s属性,c#,wpf,class,controls,properties,C#,Wpf,Class,Controls,Properties,我在班级之间的可视性上搞得一团糟。请帮我回答这个新手问题 我有两个控件(来自默认WPF工具箱的日期选择器),它们位于不同的窗口中,因此位于不同的类中。我可以从其本机类(即在其本机窗口)中轻松访问这些控件属性,如datePicker1.Text,但当我尝试从另一个窗口访问datePicker1.Text时,我什么也得不到 我尝试使用代码中对窗口的引用,将一个日期选择器的值分配给另一个日期选择器: string testStr; ... AnotherWindow aw = new AnotherW
datePicker1.Text
,但当我尝试从另一个窗口访问datePicker1.Text
时,我什么也得不到
我尝试使用代码中对窗口的引用,将一个日期选择器的值分配给另一个日期选择器:
string testStr;
...
AnotherWindow aw = new AnotherWindow();
testStr = aw.datePicker2.Text;
datePicker1.Text = testStr;
但它不起作用
我还尝试通过一个类的公共属性来实现它,比如:
public partial class AnotherWindow : Window
{
....
public string dateNearest
{
get { return datePicker2.Text; }
set { datePicker2.Text = value; }
}
....
然后在另一个窗口中使用它:
string testStr;
...
AnotherWindow aw = new AnotherWindow();
testStr = aw.dateNearest;
但也没有赋值
请帮我理解这个基本问题。我知道在WPF中还有其他访问值的方法,如数据绑定,但我想先了解基本知识。不幸的是,WPF的基本知识是数据绑定。以任何其他方式这样做都是“违背常规的”,是一种不好的做法,而且通常要比编码和理解复杂好几个数量级 对于您手头的问题,如果有数据要在视图之间共享(即使只有一个视图),请创建一个视图模型类,其中包含表示数据的属性,并绑定到视图中的属性
在您的代码中,只管理视图模型类,不要用它的视觉控件和视觉构图来触摸实际视图。
< P>我现在使用VS 2010 beta 2,它经常崩溃,做最简单的WPF编码,就像试图复制您的问题代码:):但是请考虑: 使用此语法是否可能“做正确的事情”: 编辑1:好的,我得到了您代码的WPF复制,但没有崩溃:使用上述语法,我可以在“其他窗口”中获取和设置属性 编辑2:代码也可以使用您的原始代码:)这在我第一次阅读时似乎是“正确的”。在阅读之前是否设置了该属性?:据我所知,DateTimePicker的文本属性在首次创建时默认为空字符串 编辑3:响应Rem的请求:private void button1_Click(object sender, RoutedEventArgs e)
{
WindowAdded wa = new WindowAdded();
wa.DTContent = DateTime.Now.ToString();
Console.WriteLine("dt = " + wa.DTContent);
}
而且,如果您在第二个窗口中唯一需要访问的是DateTimePicker,那么您可以使用上面建议的相同技术,但只创建并保持对DateTimePicker实例的引用。正如其他人已经指出的,这可能不是一种方法,但您可以使用:
<object x:FieldModifier="public".../>
将对象设置为公共。
有关更多信息,请参阅。不,尽管如此,它仍然不起作用。顺便说一句,感谢您分享关于VS 2010 beta 2的经验。关于您的编辑2,请在代码中说明如何在另一个窗口中访问datePicker2.Text?此解决方案将在@rem解决您的问题。窗口1中DatePicker的Text属性仅在窗口1的范围内可见。在window类中将其作为公共属性公开将允许从window 2查看和操作。@Russell,我将Window1称为主窗口,Window2称为“辅助”窗口,该窗口是由Window1中的代码创建的:在这种情况下,我们取决于Window1作为Window2的“创建者”的事实,有权访问对Window2实例的引用及其公共“无论如何”。我的示例显示了在按钮单击事件中创建的新窗口,在某种程度上是“真实代码”的一个糟糕示例,因为对Window2实例的引用将仅存在于Window1上的按钮单击事件的范围内。我得做点什么!谢谢,@Ray:无论如何,请用更好的方式展示OP!帮他看看为什么更好。当你看到一个更好的方法在这里演示时,请接受这个答案作为你接受的答案。我的印象是程序员可以自由选择在C#vs.XAML中工作的程度。我回答了OP非常具体的问题。没错,数据绑定和MVVM是WPF设计的主要模型。然而,我的经验表明,我们需要一种软方法来帮助将windows窗体设计技术转换为WPF。我的经验是,如果您试图将最糟糕的WinForms设计技术“转换”到WPF,那么您的开发人员最终会连续多年产生糟糕的设计。您甚至可能不得不用其他开发人员来替换它们,以获得像样的WPF代码。另一方面,如果你向他们展示如何使用WPF和MVVM更轻松地完成当前任务,他们将永远不会走上错误的道路,从长远来看,情况会好得多。我同意两种相互矛盾的观点。最佳实践是“最佳实践”
<object x:FieldModifier="public".../>