Yolov5报错keyerros

img


刚学yolov5,跑自己的数据集时,报错了,如下。求问,应该怎么解决呢?

根据你提供的代码和描述,数据没有更新到界面上可能是因为没有通知WPF界面去更新。在WPF中,要想在数据发生变化时及时更新UI,需要使用实现了INotifyPropertyChanged接口的类,并在属性值发生变化时触发属性更改事件。

确保满足以下几个步骤:

  1. 确保 FunctionViewModel 类继承了 INotifyPropertyChanged 接口,并实现了该接口的 PropertyChanged 事件。

  2. FunctionViewModel 类中的属性 LJogState 上触发 PropertyChanged 事件,以通知界面更新。例如,在 LJogState 的属性访问器中添加 OnPropertyChanged(nameof(LJogState))

  3. 在 XAML 中的 LabelForeground 属性上使用 {Binding LJogState, Mode=OneWay} 进行数据绑定,并将 DataContext 设置为 FunctionViewModel 的实例。

修改后的代码如下所示:

public partial class FunctionViewModel : ObservableObject
{
    public Function obj;
    public bool a = false;

    public FunctionViewModel(Function function)
    {
        obj = function;
        Task.Run(() =>
        {
            while (true)
            {
                DeviceStateUpdata();
                Thread.Sleep(300);
            }
        });
    }

    [ObservableProperty]
    private Brush? lJogState;

    public Brush? LJogState
    {
        get { return lJogState; }
        set
        {
            if (lJogState != value)
            {
                lJogState = value;
                OnPropertyChanged(nameof(LJogState));
            }
        }
    }

    private void DeviceStateUpdata()
    {
        LJogState = a ? Brushes.Red : Brushes.Green;
    }
}

在 XAML 中的 Label 的代码保持不变:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Label Content="ABC" Foreground="{Binding LJogState, Mode=OneWay}" FontSize="100"/>
</Grid>

这样,当 LJogState 属性的值发生变化时,会触发属性更改事件,在界面上及时更新对应的绑定。

希望这能帮助到你解决问题。如果还有其他疑问,请随时提问。