好的参考我之前问过: this
现在我已经对文本框进行了数据绑定,以便它在MainWindow上更新而不会出现问题
private void button_Click(object sender, RoutedEventArgs e)
{
updateTickerText("testing from button");
}
现在完全没问题,请致电以下内容:
public void updateTickerText(string value)
{
TickerText = value;
}
但是,如果我尝试从另一个页面调用updateTickerText,例如:
private void button_Click(object sender, RoutedEventArgs e)
{
MainWindow mw = new MainWindow();
//mw.TickerText = "Testing";
mw.updateTickerText("Testing");
}
它说它触发了事件(我在触发器上设置了一个消息框来更改值),但它没有更新数据绑定文本块。
额外: 我的TextBlock
<TextBlock x:Name="TickerTextBlock" HorizontalAlignment="Left" Height="23" Margin="0,347,0,0" TextWrapping="Wrap" Text="{Binding Path = TickerText, UpdateSourceTrigger=Default, Mode=TwoWay}" VerticalAlignment="Top" Width="692" />
所以回顾一下:我可以在从MainWindow调用它时更新TextBlock的绑定TickerText,但是当我从另一个页面调用相同的函数时,它不会更新。
我也使用imbeded Frame加载页面,TickerTextBlock在主窗体上。
答案 0 :(得分:1)
在此创建一个新对象:
MainWindow mw = new MainWindow();
//mw.TickerText = "Testing";
mw.updateTickerText("Testing");
您已确保您的函数调用不会影响屏幕上的任何内容。新对象在屏幕上不可见,并且 与除{class>之外的MainWindow
的实际可见实例相同。
因此,您需要传入数据上下文的现有实例,并在 上调用UpdateTickerText
(公共方法的大小写!)。您可以通过在构造函数,使用服务定位器或其他几种方法上传递它来完成此操作。
另外,您不应该将视图类用作视图模型。分离视图和视图模型类使得这样的东西更加清晰。
答案 1 :(得分:0)
您确定引用了正确的MainWindow实例吗? 在我看来你正在创建一个新的
MainWindow mw = new MainWindow();