我很确定我错过了一些非常小的东西,但我一生都无法弄清楚我哪里出错了。
我试图将我的数据网格绑定到实际上正在获取输入的 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}"));
据我所知,一切都设置正确,我看不出任何错误。
白猪掌柜的
相关分类