c# - 为什么在 DataGridTextcolumn 中找不到 ObservableCollection 中实际类的属性,但父类属性是?

标签 c# wpf xaml mvvm data-binding

我得到:

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/

相关文章:

c# - 隐藏 C# 'using' 参数的实现

c# - 带有 OAuth2 的 Youtube API v3 返回 "Received verification code. Closing..."

c# - 使用 C# 在 WPF 中更改背景图像

c# - Control.Dispatcher.BeginInvoke() 和 Control.Dispatcher.Invoke() 顺序执行是不是很困惑?

c# - 从 Source 获取图片 uri

wpf - Visual Studio : Is there XAML snippets support?

c# - 如何从 ActionExecutingContext 获取路由模板

c# - UserPrincipal.FindByIdentity 权限

wpf - MouseOver和MouseDown上的动画按钮

c# - 在 MVVM 应用程序中使用 autofac