我很确定我错过了一些非常小的东西,但我一生都无法弄清楚我哪里出错了。我试图将我的数据网格绑定到实际上正在获取输入的 ConsoleLines 属性,我调试了它并且 ConsoleLines 包含多个字符串。但由于某种原因,它没有更新 UI 并将线条添加到 gridview .. 或者从技术上讲是 TextBlock。所以我的 MainWindows 设置是这样的public partial class MainWindow : Window { Server Server = new Server(); public MainWindow() { InitializeComponent(); DataContext = new MasterViewModel(); } private void BtnStart_OnClick(object sender, RoutedEventArgs e) { Server.StartServer(); } }如您所见,我将 DataContext 设置为 MasterViewModel 的一个新实例,如下所示public class MasterViewModel { public Server Server { get; } = new Server(); }这是我的服务器类public class Server : INotifyPropertyChanged { public Process pServer; public Server() { } public ObservableCollection<string> ConsoleLines { get; } = new ObservableCollection<string>(); public void StartServer() { pServer = new Process(); pServer.StartInfo.FileName = "java"; pServer.StartInfo.Arguments = @"-jar " + "-Xms512M -Xmx1G spigot.jar"; pServer.StartInfo.UseShellExecute = false; pServer.StartInfo.RedirectStandardOutput = true; pServer.StartInfo.RedirectStandardError = true; pServer.StartInfo.RedirectStandardInput = true; pServer.OutputDataReceived += OKDataReceived; pServer.ErrorDataReceived += ErrorDataReceived; pServer.Start(); pServer.BeginErrorReadLine(); pServer.BeginOutputReadLine(); } private void ErrorDataReceived(object sender, DataReceivedEventArgs e) => Application.Current.Dispatcher.Invoke(() => ConsoleLines.Add($"ERROR: {e.Data}")); private void OKDataReceived(object sender, DataReceivedEventArgs e) => Application.Current.Dispatcher.Invoke(() => ConsoleLines.Add($"MESSAGE: {e.Data}"));据我所知,一切都设置正确,我看不出任何错误。
1 回答
白猪掌柜的
TA贡献1893条经验 获得超10个赞
您应该Server从 MainWindow 中删除该字段并启动 DataContext 中的服务器。
private void BtnStart_OnClick(object sender, RoutedEventArgs e)
{
((MasterViewModel)DataContext).Server.StartServer();
}
或者,像这样初始化视图模型:
DataContext = new MasterViewModel { Server = Server };
它将 Server 字段值分配给视图模型中的 Server 属性(然后必须是读/写)。否则,您将有两个 Server 实例。
- 1 回答
- 0 关注
- 236 浏览
添加回答
举报
0/150
提交
取消