Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从另一个类引用主xaml_C#_Uwp_Uwp Xaml - Fatal编程技术网

C# 如何从另一个类引用主xaml

C# 如何从另一个类引用主xaml,c#,uwp,uwp-xaml,C#,Uwp,Uwp Xaml,我想将textblock1从main以外的类更新为'there'。如图所示,此代码没有错误,但不起作用。Textblock1设置为 FieldModifier=“公共” 让你的文本块控件像这样公开x:FieldModifier=“public” 然后在我们的库中执行以下操作: public class Library { private TextBlock myTb{ get; set; } public Library() {

我想将textblock1从main以外的类更新为'there'。如图所示,此代码没有错误,但不起作用。Textblock1设置为 FieldModifier=“公共”


让你的文本块控件像这样公开<代码>x:FieldModifier=“public”

然后在我们的
库中执行以下操作:

public class Library
    {
        private TextBlock myTb{ get; set; }
        public Library()
        {
            myTb = MainPage.mainPage.TextBlockName;
        }
        public void Doit()
        {
            myTb.Text = "there";
        }

    }

让你的文本块控件像这样公开<代码>x:FieldModifier=“public”

然后在我们的
库中执行以下操作:

public class Library
    {
        private TextBlock myTb{ get; set; }
        public Library()
        {
            myTb = MainPage.mainPage.TextBlockName;
        }
        public void Doit()
        {
            myTb.Text = "there";
        }

    }
简短的回答 将
窗口作为参数传递给其他类

public class Library {

    public void Doit(MainPage mainPage)
    {
         mainPage.textblock1.Text = "there";
    }
}
编辑根据此处发布的另一个答案,您(默认情况下)无法从类外访问控件(因为它们设置为受保护的

您可以将访问修饰符覆盖到
public
(请参阅另一个答案),但这似乎违反了UI和数据逻辑应该分开的想法

从技术角度看,它确实有效;我只是建议不要这样做,因为这会导致未来的发展问题

谨慎的回答 您应该努力将UI和数据逻辑分开。在大多数情况下,您希望另一个类访问窗口的控件;您违反了UI和数据逻辑分离的原则

简而言之,您不希望任何人(除了
主页
)知道
主页
有一个
文本块
;更不用说给他们直接设置内容的能力了

MainPage
中,创建公共属性:

public String MyDisplayValue
{
    get
    {
        return this.textblock1.Text;
    }
    set
    {
        this.textblock1.Text = value;
    }
}
在您的外部
库中
类:

public void Doit(MainPage mainPage)
{
     mainPage.MyDisplayValue = "there";
}
从功能上讲,该应用程序的工作原理与我提供的简短回答相同。但这一点在UI和数据逻辑之间创造了更好的分离

这是一个良好的实践问题,而不是技术要求。

简短的回答 将
窗口作为参数传递给其他类

public class Library {

    public void Doit(MainPage mainPage)
    {
         mainPage.textblock1.Text = "there";
    }
}
编辑根据此处发布的另一个答案,您(默认情况下)无法从类外访问控件(因为它们设置为受保护的

您可以将访问修饰符覆盖到
public
(请参阅另一个答案),但这似乎违反了UI和数据逻辑应该分开的想法

从技术角度看,它确实有效;我只是建议不要这样做,因为这会导致未来的发展问题

谨慎的回答 您应该努力将UI和数据逻辑分开。在大多数情况下,您希望另一个类访问窗口的控件;您违反了UI和数据逻辑分离的原则

简而言之,您不希望任何人(除了
主页
)知道
主页
有一个
文本块
;更不用说给他们直接设置内容的能力了

MainPage
中,创建公共属性:

public String MyDisplayValue
{
    get
    {
        return this.textblock1.Text;
    }
    set
    {
        this.textblock1.Text = value;
    }
}
在您的外部
库中
类:

public void Doit(MainPage mainPage)
{
     mainPage.MyDisplayValue = "there";
}
从功能上讲,该应用程序的工作原理与我提供的简短回答相同。但这一点在UI和数据逻辑之间创造了更好的分离



这是一个良好的实践,而不是技术要求。

您使用的是MVVM吗?这是一个UWP项目。。。我想把大的代码主体分成更小的部分。。。我没有使用MVVM…我更新了问题以显示完整的语法。建议的解决方案不起作用。是否确实要向其传递一个
新主页()
?我无法理解传递该页本身的语法。是否使用MVVM?这是一个UWP项目。。。我想把大的代码主体分成更小的部分。。。我没有使用MVVM…我更新了问题以显示完整的语法。建议的解决方案不起作用。是否确实要向其传递
新主页()
?我无法理解传递页面本身的语法。我想使用FieldModifier。如果有必要,我会这样做。有没有一种方法可以在不修改XAML的情况下实现这一点?我有很多需要改变的变量……PurLabIs,那么你应该考虑使用一些MVVM。framework@ravikumar:如果OP关心的是重构一个庞大的、写得不好的代码库的复杂性;那么,一个新框架的实现不会使它变得更容易(对于重构本身来说)。如果有必要,我会这样做。有没有一种方法可以在不修改XAML的情况下实现这一点?我有很多需要改变的变量……PurLabIs,那么你应该考虑使用一些MVVM。framework@ravikumar:如果OP关心的是重构一个庞大的、写得不好的代码库的复杂性;那么,一个新框架的实现并不会使它变得更容易(对于重构本身来说),我需要一个MyDisplayValue例程来处理我在大型项目中需要更改的每个变量。我想用你的第一个解决方案。这样我就不必愚弄XAML,而将引用更改为大量变量会更容易。@pollaris:请检查其他答案;因为我不确定是否需要将这些字段显式标记为public。虽然我确实认为你决定公开使用窗口控件是一个雷区。特别是对于一个大型代码库(您面临的),这样的决策很快就会失控。我强烈建议不要让多个源(类)都可以直接访问单个窗口的控件。这很可能最终会产生冲突。我想用一种合适的方式来做。您是否推荐FieldModifier方法?我没有MVVM方面的经验-这是将大型程序分割成较小程序的解决方案吗?@pollaris我强烈建议通过使用定制属性和方法(=m