【问题标题】:Displaying properties of a class in a listbox from a databound Observable collection WPF在数据绑定的 Observable 集合 WPF 的列表框中显示类的属性
【发布时间】:2016-04-18 16:34:57
【问题描述】:

我目前正在尝试显示来自ObservableCollection(myClass) 的项目。该类本身只有一些公共字符串属性。我知道集合正在从流源正确更新,但由于某种原因,它没有使用我想要的属性更新列表框。我的 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 从类实例添加到列表框中。

pumpItem如下所示:

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;            
    }
}

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

【问题讨论】:

    标签: c# wpf data-binding observablecollection


    【解决方案1】:

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

    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"/>
    

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

    【讨论】:

    • 正确答案,只是变量名大写之类的一些事情。例如。在您的示例中,它应该是私有字符串 pumpId;为了匹配你的变量名。还有pumpState状态;应该是私有的。除此之外,非常乐意将其标记为已回答。谢谢
    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2019-11-14
    • 2014-10-05
    • 2011-11-27
    • 2017-07-23
    相关资源
    最近更新 更多