C# 更新主窗口上的标签
我有一个WPF应用程序,我试图从另一个窗口更新我的WPF主窗口 这是我的密码 main window.xamlC# 更新主窗口上的标签,c#,wpf,C#,Wpf,我有一个WPF应用程序,我试图从另一个窗口更新我的WPF主窗口 这是我的密码 main window.xaml <Label x:Name="SomeLabel" Content="Label" Margin="290,2,0,0" VerticalAlignment="Top" /> 然而,它在这一点上被打破。引发的异常是 “无效的强制转换异常无法将CallingWindow的对象强制转换为MainWindow” 我遗漏了什么?简而言之,第二个窗口中的调用看不到SomeL
<Label x:Name="SomeLabel" Content="Label" Margin="290,2,0,0" VerticalAlignment="Top" />
然而,它在这一点上被打破。引发的异常是
“无效的强制转换异常无法将CallingWindow的对象强制转换为MainWindow”
我遗漏了什么?简而言之,第二个窗口中的调用看不到
SomeLabel
。长话短说,您可以创建一些公共静态
(或内部静态
)方法来设置该标签的值
;即使它不是最优雅的解决方案,它也应该可以工作(顺便说一句,最好使用TextBlock
控件而不是Label
)。希望这能有所帮助。非常感谢,简而言之,SomeLabel
对于第二个窗口的调用不可见。长话短说,您可以创建一些公共静态
(或内部静态
)方法来设置该标签的值
;即使它不是最优雅的解决方案,它也应该可以工作(顺便说一句,最好使用TextBlock
控件而不是Label
)。希望这能有所帮助。非常感谢,简而言之,SomeLabel
对于第二个窗口的调用不可见。长话短说,您可以创建一些公共静态
(或内部静态
)方法来设置该标签的值
;即使它不是最优雅的解决方案,它也应该可以工作(顺便说一句,最好使用TextBlock
控件而不是Label
)。希望这能有所帮助。非常感谢,简而言之,SomeLabel
对于第二个窗口的调用不可见。长话短说,您可以创建一些公共静态
(或内部静态
)方法来设置该标签的值
;即使它不是最优雅的解决方案,它也应该可以工作(顺便说一句,最好使用TextBlock
控件而不是Label
)。希望这能有所帮助。致以最诚挚的问候,如果您希望从另一个窗口对主窗口产生影响,这意味着另一个窗口对主窗口具有依赖性。确保将MainWindow作为参数传递给另一个窗口的构造函数,并将此依赖项存储在引用变量中。ie_主窗口
然后,如果希望此调用从不同于GUI线程的线程进行,您可以稍后简单地使用该引用并使用dispatcher。
这是一个比使用任何构造(如:
(MainWindow)System.Windows.Application.Current.MainWindow)要好得多的解决方案。
最好在MainWindow上创建一个方法并调用该方法,而不是直接更新MainWindow上的控件。这样更好,因为这样其他窗口就不必知道mainwindow的详细信息。
更好的是,您可以为此更新方法创建一个接口,而不是将完整的主窗口传递给另一个窗口的构造函数,而是传递该接口。(请参见下面的代码示例)还有更多的替代方法,比如生成事件,但是您必须为生成窗口的事件注册mainwindow。您可以转移到MVVM,但这将导致更复杂的设计。我认为您还没有使用MVVM,或者您不会问这个问题 哪种解决方案最好取决于具体情况。您的代码非常小,我们无法提供很好的建议。
仅仅是一些示例代码就可以让您开始它还远未完成:
public interface IUpdateTrigger{
void updateNotification();
}
public class MainWindow : IUpdateTrigger{
public void updateNotification(){
//update controls, dispatch if needed
}
public void showSecondWindow(){
SecondWindow second = new SecondWindow(this);
//code to show the second window like second.show();
}
}
public class SecondWindow{
private IUpdateTrigger _UpdateTrigger;
public SecondWindow(IUpdateTrigger trigger){
_UpdateTrigger = trigger
}
public Whatevermethod(){
_UpdateTrigger.updateNotification();
}
}
如果您想从另一个窗口影响MainWindow,这意味着另一个窗口依赖于MainWindow。
确保将MainWindow作为参数传递给另一个窗口的构造函数,并将此依赖项存储在引用变量中。ie_主窗口
然后,如果希望此调用从不同于GUI线程的线程进行,您可以稍后简单地使用该引用并使用dispatcher。
这是一个比使用任何构造(如:
(MainWindow)System.Windows.Application.Current.MainWindow)要好得多的解决方案。
最好在MainWindow上创建一个方法并调用该方法,而不是直接更新MainWindow上的控件。这样更好,因为这样其他窗口就不必知道mainwindow的详细信息。
更好的是,您可以为此更新方法创建一个接口,而不是将完整的主窗口传递给另一个窗口的构造函数,而是传递该接口。(请参见下面的代码示例)还有更多的替代方法,比如生成事件,但是您必须为生成窗口的事件注册mainwindow。您可以转移到MVVM,但这将导致更复杂的设计。我认为您还没有使用MVVM,或者您不会问这个问题 哪种解决方案最好取决于具体情况。您的代码非常小,我们无法提供很好的建议。
仅仅是一些示例代码就可以让您开始它还远未完成:
public interface IUpdateTrigger{
void updateNotification();
}
public class MainWindow : IUpdateTrigger{
public void updateNotification(){
//update controls, dispatch if needed
}
public void showSecondWindow(){
SecondWindow second = new SecondWindow(this);
//code to show the second window like second.show();
}
}
public class SecondWindow{
private IUpdateTrigger _UpdateTrigger;
public SecondWindow(IUpdateTrigger trigger){
_UpdateTrigger = trigger
}
public Whatevermethod(){
_UpdateTrigger.updateNotification();
}
}
如果您想从另一个窗口影响MainWindow,这意味着另一个窗口依赖于MainWindow。
确保将MainWindow作为参数传递给另一个窗口的构造函数,并将此依赖项存储在引用变量中。ie_主窗口
然后,如果希望此调用从不同于GUI线程的线程进行,您可以稍后简单地使用该引用并使用dispatcher。
这是一个比使用任何构造(如:
(MainWindow)System.Windows.Application.Current.MainWindow)要好得多的解决方案。
最好在MainWindow上创建一个方法并调用该方法,而不是直接更新MainWindow上的控件。这样更好,因为这样其他窗口就不必知道mainwindow的详细信息。
更好的是,您可以为此更新创建一个接口