在数据绑定 Observable 集合 WPF 的列表框中显示 class 的属性

Displaying properties of a class in a listbox from a databound Observable collection WPF

我目前正在尝试显示 ObservableCollection(myClass) 中的项目。 class 本身只有一些 public 字符串属性。我知道该集合正在从流源正确更新,但出于某种原因,它没有使用我想要的属性更新列表框。很可能我的 XAML 有一些错误:

<Window x:Class="PoSClientWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid Margin="10">
        <ListBox x:Name="pumpListBox" ItemsSource="{Binding PumpCollection}" Grid.IsSharedSizeScope="True">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition SharedSizeGroup="ID" />
                            <ColumnDefinition SharedSizeGroup="State" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Margin="2" Text="{Binding pumpID}" Grid.Column="0"/>
                        <TextBlock Margin="2" Text="{Binding state}" Grid.Column="1"/>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

通过研究关于这个错误的其他帖子。我已经将 this.DataContext = this; 添加到我的 MainWindow 以及具有:

public ObservableCollection<PumpItem> PumpCollection
{
    get { return pumpCollection; }
}

为了给它绑定ItemsSource。我认为我在 XAML 中声明绑定的方式有误,但我不确定。我正在尝试将属性 pumpIDstate 添加到 class 实例中的列表框。

classpumpItem如下图:

public enum pumpState
{
    Available,
    customerWaiting,
    Pumping,
    customerPaying
};

public enum fuelSelection
{
    Petrol,
    Diesel,
    LPG,
    Hydrogen,
    None
};

public class PumpItem
{
    public string pumpID;

    public double fuelPumped;
    public double fuelCost;

    public fuelSelection selection;
    public pumpState state;

    public PumpItem(string _ID)
    {
        this.pumpID = _ID;
        this.fuelPumped = 0;
        this.fuelCost = 0;
        this.selection = fuelSelection.None;
        this.state = pumpState.Available;            
    }
}

非常感谢任何指点或帮助。

您不能绑定到字段。将这些更改为 public 属性

public class PumpItem
{
    private string pumpID;
    public string PumpId
    {
        get
        {
             return pumpId;
        }
        set
        {
            pumpId = value;
        }
    }

    private double fuelPumped;
    public double FuelPumped
    {
        get
        {
             return fuelPumped;
        }
        set
        {
            fuelPumped = value;
        }
    }

    private double fuelCost;
    public double FuelCost
    {
        get
        {
             return fuelCost;
        }
        set
        {
            fuelCost= value;
        }
    }

    public fuelSelection selection;
    public fuelSelection Selection
    {
        get
        {
             return selection;
        }
        set
        {
            selection = value;
        }
    }

    public pumpState state;
    public pumpState State
    {
        get
        {
             return state;
        }
        set
        {
            state = value;
        }
    }

    public PumpItem(string _ID)
    {
        this.PumpID = _ID;
        this.FuelPumped = 0;
        this.FuelCost = 0;
        this.Selection = fuelSelection.None;
        this.State = pumpState.Available;
    }
}

XAML

<TextBlock Margin="2" Text="{Binding PumpID}" Grid.Column="0"/>
<TextBlock Margin="2" Text="{Binding State}" Grid.Column="1"/>

检查输出控制台是否存在绑定错误