2016-05-11 13 views
1

私が取得:1列のDataGridTextcolumnではObservableCollectionの実際のクラスのプロパティが見つかりませんが、親クラスのプロパティは?

System.Windows.Data Error: 40 : BindingExpression path error: 'State' property not found on 'object' ''PointNetObject' (HashCode=9270846)'. BindingExpression:Path=State; DataItem='PointNetObject' (HashCode=9270846); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

を。すべての行がテーブルに追加されますが、各行に対してエラーが発生します。他の2つの列は各行ごとに表示されます。しかし、国家ではない。もちろん、コンバータは決して呼び出されません。

セットアップは以下のとおりです。

私はオブジェクトを持っている:

フェーズのような性質を持つクラスとのViewModelに

ラベル継承

public class PointNetObject : NetObject 
{ 
    SwitchObjectState State 
    { 
     get { return _state; } 
     set { _state = value; } 
    } 
} 

<DataGrid Name="SelectedSwitchesGrid" CanUserAddRows="False" CanUserResizeColumns="True" CanUserSortColumns="True" IsReadOnly="True" 
        ItemsSource="{Binding SelectedSwitchItems}" 
      <DataGrid.Columns> 
        <DataGridTextColumn Header="{DynamicResource XpStrLabel}" Binding="{Binding Label}" /> 
        <DataGridTextColumn Header="{DynamicResource XpStrPhase}" Binding="{Binding Phase}" /> 
        <DataGridTextColumn Header="{DynamicResource XpStrState}" Binding="{Binding State, Converter={StaticResource SwitchObjectStateToStringConverter}}" /> 
       </DataGrid.Columns> 
    </DataGrid> 
+2

あなたの 'SwitchObjectState State'プロパティは' public'ではありません。かなり重要です。 – Jonesopolis

+1

ありがとう、私はばかだよ –

+0

@ Jonesopolis:私はそれを受け入れることができるようにasnwerとして書くケア? –

答えて

0

:ビューで

public ObservableCollection<PointNetObject> SelectedSwitchItems { get; private set; } 

public SelectedObjectsViewModel(SelectedObjects selectedObjects) 
{ 
    SelectedSwitchItems = new ObservableCollection<PointNetObject>(GetSwitches()); 
}  


IEnumerable<PointNetObject> GetSwitches() 
{ 
    foreach (var netObject in SelectedObjectsInstance.GetSelectedObjectItems(x => IsSwitch(x))) 
    { 
     yield return (PointNetObject) netObject; 
    } 
} 

をあなたのモデル:

public class PointNetObject : NetObject 
{ 
    SwitchObjectState State 
    { 
     get { return _state; } 
     set { _state = value; } 
    } 
} 

Stateプロパティはpublicとして宣言されていません。

ViewModelからビューにバインドするプロパティはすべてパブリックにする必要があります。そうしないと、Viewはそれを見ることができません。

心配する必要はありません。私たちは一度それを完了しました。

+1

答えにStateプロパティをpublicにしたいと思うかもしれません。/ – Will

+0

これは問題の領域であることを指摘していましたが、おそらくもっと意味があります – Jonesopolis

+0

それは変です。通常、答えには固定コードのOPコードが含まれていますが、正確に同じコードではなく、なぜそれが間違っているのかについての説明は含まれていません。とにかく、私の望ましくない意見を与えて、私は休暇を取る。おはようございます。 – Will

関連する問題