2016-04-18 15 views
1

現在、ObservableCollection(myClass)のアイテムを表示しようとしています。クラス自体にはいくつかのパブリック文字列プロパティがあります。私はコレクションがストリームソースから正しく更新されていることを知っていますが、何らかの理由でリストボックスを必要なプロパティで更新していません。 XAMLにエラーがある可能性が非常に高いです:データバインドからのリストボックスのクラスのプロパティの表示ObservableコレクションWPF

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

この非常にエラーに関する他の投稿をリサーチしています。それにItemsSourceをバインドするために

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

を:私は私のMainWindowと同様に有することにthis.DataContext = this;を追加含めました。 XAMLでバインディングを宣言する方法にエラーがあるとは思いますが、わかりません。私はプロパティpumpIDstateをクラスインスタンスからリストボックスに追加しようとしています。任意のポインタ

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

をや感謝を助ける:

クラスpumpItemは以下のとおりです。

答えて

1

フィールドにバインドすることはできません。

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

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

のパブリックプロパティにこれらを変更して、答えをお金にエラー

+0

右を結合するための変数名の大文字のようなだけでいくつかのことを出力コンソールをチェックしてください。例えば。あなたの例では、private string pumpIdでなければなりません。あなたの変数名を一致させるために。また、pumpState状態。おそらく私的でなければならない。それとは別に、答えとしてマークするのが嬉しいです。ありがとう – James

関連する問題