如何从另一个类

时间:2017-06-26 11:48:19

标签: c# uwp uwp-xaml

我想将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";
        }

    }
}

2 个答案:

答案 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除外)知道MainPageMainpage;更不用说让他们直接设置内容了。

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";
        }

    }