更改文件时更新Blazor组件

发布于 2025-02-03 16:58:02 字数 4413 浏览 1 评论 0原文

更改文件时,我想更新我的大餐组件。这是我的代码:

<div class="orders">
    <div class="sales">
        <h3>Asks</h3>
        <table class="table text-light orders-table table-hover">
            <thead>
                <tr class="text-center">
                    <th>Order Id</th>
                    <th>Price</th>
                    <th>Quantiy</th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                @foreach(var order in Model.Sales)
                {
                    <tr>
                        <td class = "">@order.OrderID</td>
                        <td class = "">@order.Price.ToString("0.00")</td>
                        <td class = "">@order.Quantity</td>
                    </tr>
                }
            </tbody>
        </table>
    </div>
    <div class="buys">
        <h3>Bids</h3>
        <table class="table text-light orders-table table-hover">
            <thead>
                <tr class="text-center">
                    <th>Order Id</th>
                    <th>Price</th>
                    <th>Quantiy</th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                @foreach(var order in Model.Buys)
                {
                    <tr>
                        <td class = "">@order.OrderID</td>
                        <td class = "">@order.Price.ToString("0.00")</td>
                        <td class = "">@order.Quantity</td>
                    </tr>
                }
            </tbody>
        </table>
    </div>
</div>
@code {
    public Orders()
    {
    }

    [Parameter]
    public IndexViewModel Model { get; set; }

    private FileSystemWatcher watcher = new FileSystemWatcher(@"My\folder\directory\");

    protected override void OnInitialized()
    {
        watcher.NotifyFilter = NotifyFilters.Attributes
                                 | NotifyFilters.CreationTime
                                 | NotifyFilters.DirectoryName
                                 | NotifyFilters.FileName
                                 | NotifyFilters.LastAccess
                                 | NotifyFilters.LastWrite
                                 | NotifyFilters.Security
                                 | NotifyFilters.Size;

        watcher.Changed += OnChanged;
        watcher.Created += OnCreated;
        watcher.Deleted += OnDeleted;
        watcher.Renamed += OnRenamed;

        watcher.Filter = "*.txt";
        watcher.IncludeSubdirectories = true;
        watcher.EnableRaisingEvents = true;
    }

    private void OnChanged(object sender, FileSystemEventArgs e)
    {
        Model = new IndexViewModel(new List<OrderViewModel>(), new List<OrderViewModel>());

        Console.WriteLine($"Changed: {e.FullPath}");
        Model.Sales.Add(new OrderViewModel() { OrderID = new Random().Next(int.MaxValue), Price = new Random().Next(10), Quantity =  new Random().Next(100)});
        //Model.Sales.RemoveAt(new Random().Next(Model.Sales.Count - 1));
        Model.Sales = Model.Sales.OrderBy(x => x.Price).ToList();

        Model.Buys.Add(new OrderViewModel() { OrderID = new Random().Next(int.MaxValue), Price = new Random().Next(20), Quantity =  new Random().Next(100)});
        //Model.Buys.RemoveAt(new Random().Next(Model.Sales.Count - 1));
        Model.Buys = Model.Buys.OrderByDescending(x => x.Price).ToList();
    }

    private static void OnCreated(object sender, FileSystemEventArgs e)
    {
        string value = $"Created: {e.FullPath}";
        Console.WriteLine(value);
    }

    private static void OnDeleted(object sender, FileSystemEventArgs e) =>
        Console.WriteLine($"Deleted: {e.FullPath}");

    private static void OnRenamed(object sender, RenamedEventArgs e)
    {
        Console.WriteLine($"Renamed:");
        Console.WriteLine($"    Old: {e.OldFullPath}");
        Console.WriteLine($"    New: {e.FullPath}");
    }
}

当文件更改后,将调用方法,并更改indexViewModel,但在屏幕上没有更改。我尝试使方法静态,但是我也必须使indexViewModel类静态静态,这对我不起作用。

I want to update my blazor component when file is changed. This is my code:

<div class="orders">
    <div class="sales">
        <h3>Asks</h3>
        <table class="table text-light orders-table table-hover">
            <thead>
                <tr class="text-center">
                    <th>Order Id</th>
                    <th>Price</th>
                    <th>Quantiy</th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                @foreach(var order in Model.Sales)
                {
                    <tr>
                        <td class = "">@order.OrderID</td>
                        <td class = "">@order.Price.ToString("0.00")</td>
                        <td class = "">@order.Quantity</td>
                    </tr>
                }
            </tbody>
        </table>
    </div>
    <div class="buys">
        <h3>Bids</h3>
        <table class="table text-light orders-table table-hover">
            <thead>
                <tr class="text-center">
                    <th>Order Id</th>
                    <th>Price</th>
                    <th>Quantiy</th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                @foreach(var order in Model.Buys)
                {
                    <tr>
                        <td class = "">@order.OrderID</td>
                        <td class = "">@order.Price.ToString("0.00")</td>
                        <td class = "">@order.Quantity</td>
                    </tr>
                }
            </tbody>
        </table>
    </div>
</div>
@code {
    public Orders()
    {
    }

    [Parameter]
    public IndexViewModel Model { get; set; }

    private FileSystemWatcher watcher = new FileSystemWatcher(@"My\folder\directory\");

    protected override void OnInitialized()
    {
        watcher.NotifyFilter = NotifyFilters.Attributes
                                 | NotifyFilters.CreationTime
                                 | NotifyFilters.DirectoryName
                                 | NotifyFilters.FileName
                                 | NotifyFilters.LastAccess
                                 | NotifyFilters.LastWrite
                                 | NotifyFilters.Security
                                 | NotifyFilters.Size;

        watcher.Changed += OnChanged;
        watcher.Created += OnCreated;
        watcher.Deleted += OnDeleted;
        watcher.Renamed += OnRenamed;

        watcher.Filter = "*.txt";
        watcher.IncludeSubdirectories = true;
        watcher.EnableRaisingEvents = true;
    }

    private void OnChanged(object sender, FileSystemEventArgs e)
    {
        Model = new IndexViewModel(new List<OrderViewModel>(), new List<OrderViewModel>());

        Console.WriteLine(
quot;Changed: {e.FullPath}");
        Model.Sales.Add(new OrderViewModel() { OrderID = new Random().Next(int.MaxValue), Price = new Random().Next(10), Quantity =  new Random().Next(100)});
        //Model.Sales.RemoveAt(new Random().Next(Model.Sales.Count - 1));
        Model.Sales = Model.Sales.OrderBy(x => x.Price).ToList();

        Model.Buys.Add(new OrderViewModel() { OrderID = new Random().Next(int.MaxValue), Price = new Random().Next(20), Quantity =  new Random().Next(100)});
        //Model.Buys.RemoveAt(new Random().Next(Model.Sales.Count - 1));
        Model.Buys = Model.Buys.OrderByDescending(x => x.Price).ToList();
    }

    private static void OnCreated(object sender, FileSystemEventArgs e)
    {
        string value = 
quot;Created: {e.FullPath}";
        Console.WriteLine(value);
    }

    private static void OnDeleted(object sender, FileSystemEventArgs e) =>
        Console.WriteLine(
quot;Deleted: {e.FullPath}");

    private static void OnRenamed(object sender, RenamedEventArgs e)
    {
        Console.WriteLine(
quot;Renamed:");
        Console.WriteLine(
quot;    Old: {e.OldFullPath}");
        Console.WriteLine(
quot;    New: {e.FullPath}");
    }
}

When the file is changed method OnChanged is called and IndexViewModel is changed but no changes are made on the screen. I tried making the method static but thus I have to make the IndexViewModel class static too which doesn't work for me.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酒解孤独 2025-02-10 16:58:02

尝试在statehaschanged on Changed 方法的末尾调用statehaschanged,以重新渲染用新值渲染UI:

InvokeAsync( () => StateHasChanged());

Try to put a call to the StateHasChanged at the end of the OnChanged method to re-render the UI with the new values:

InvokeAsync( () => StateHasChanged());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文