C#wpf从另一个脚本

时间:2015-09-22 23:55:42

标签: c# wpf xaml

好的参考我之前问过: 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在主窗体上。

2 个答案:

答案 0 :(得分:1)

在此创建一个新对象:

MainWindow mw = new MainWindow();
//mw.TickerText = "Testing";
mw.updateTickerText("Testing");

您已确保您的函数调用不会影响屏幕上的任何内容。新对象在屏幕上不可见,并且 与除{class>之外的MainWindow的实际可见实例相同。

因此,您需要传入数据上下文的现有实例,并在 上调用UpdateTickerText(公共方法的大小写!)。您可以通过在构造函数,使用服务定位器或其他几种方法上传递它来完成此操作。

另外,您不应该将视图类用作视图模型。分离视图和视图模型类使得这样的东西更加清晰。

答案 1 :(得分:0)

您确定引用了正确的MainWindow实例吗? 在我看来你正在创建一个新的

MainWindow mw = new MainWindow();