我得到:
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')
为一列。所有行都添加到表中,但是对于每一行,我都会收到错误消息。每一行都显示了另外两列。但不是国家。自然地,转换器永远不会被调用。
设置如下所述。
我有一个对象:
public class PointNetObject : NetObject
{
SwitchObjectState State
{
get { return _state; }
set { _state = value; }
}
}
它继承了具有 Phase 和 Label 等属性的类
在 View 模型中:
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;
}
}
在 View 中:
<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>
最佳答案
在您的模型中:
public class PointNetObject : NetObject
{
SwitchObjectState State
{
get { return _state; }
set { _state = value; }
}
}
你
State
属性(property)没有被宣布为公共(public)的。您从 ViewModel 绑定(bind)到 View 的任何属性都必须是公共(public)的,否则 View 将无法看到它。
别担心,我们都做过一次。
关于c# - 为什么在 DataGridTextcolumn 中找不到 ObservableCollection 中实际类的属性,但父类属性是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37170823/