C# 如何从另一个类引用主xaml
我想将textblock1从main以外的类更新为'there'。如图所示,此代码没有错误,但不起作用。Textblock1设置为 FieldModifier=“公共”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() {
让你的文本块控件像这样公开<代码>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