我想将textblock1从主要的类更新为“there”。如图所示,此代码没有错误,但不起作用。 Textblock1设置为 FieldModifier = “公开”。
namespace myProgram
{
public sealed partial class MainPage : Page
{
Library stuff = new Library();
public MainPage()
{
this.InitializeComponent();
}
public void mainStuff()
{
stuff.Doit(new MainPage());
}
}
}
namespace myProgram
{
public class Library
{
public void Doit(MainPage mainPage)
{
mainPage.textblock1.Text = "there";
}
}
}
答案 0 :(得分:3)
将def get(self, request, *args, **kwargs):
self.object = None
title = kwargs.get('title')
entry = get_object_or_404(Entry, title=title)
context_data = self.get_context_data()
context_data.update(entry=entry)
return self.render_to_response(context_data)
作为参数传递给其他类。
Window
编辑根据此处发布的其他答案,您不能(默认情况下)从课堂外访问控件(因为它们设置为public class Library {
public void Doit(MainPage mainPage)
{
mainPage.textblock1.Text = "there";
}
}
)。
您可以将访问修饰符覆盖为protected
(请参阅其他答案),但这似乎违反了UI和数据逻辑应该分开的想法。
从技术角度来看,它确实有效;我只是建议不要这样做,因为它可能导致未来的发展问题。
您应该努力保持UI和数据逻辑分离。在大多数情况下,您希望其他类访问窗口的控件;你违反了UI和数据逻辑隔离的原则。
简而言之,您不希望任何人(public
除外)知道MainPage
有Mainpage
;更不用说让他们直接设置内容了。
在Textblock
中,创建一个公共属性:
MainPage
在您的外部public String MyDisplayValue
{
get
{
return this.textblock1.Text;
}
set
{
this.textblock1.Text = value;
}
}
课程中:
Library
从功能上讲,该应用程序的工作方式与我提供的简短答案相同。但是这一点在UI和数据逻辑之间创造了一个更好的分离。
这是一个良好的做法,而不是技术要求。
答案 1 :(得分:1)
让TextBlock控件像这样公开。 x:FieldModifier="public"
<TextBlock Name="TextBlockName"
x:FieldModifier="public"/>
然后公开MainPage类
public sealed partial class MainPage : Page
{
public static MainPage mainPage { get; set; }
public MainPage()
{
this.InitializeComponent();
mainPage = this;
}
}
然后在我们的Library
课程中执行此操作:
public class Library
{
private TextBlock myTb{ get; set; }
public Library()
{
myTb = MainPage.mainPage.TextBlockName;
}
public void Doit()
{
myTb.Text = "there";
}
}