将 Objects 的 Observable Collection 绑定到 RadTreeListView

Binding an Observable Collection of Objects to a RadTreeListView

如标题所述,我只想绑定我的 ObservableCollection。我仅遵循了一些示例并查看了 telerik 网站,但似乎我做错了什么。下面是我的 DataContext 以及简化为必要内容的 Xaml 代码。我你需要更多 Ino 我很乐意提供它。 所有 Dog 属性都具有 getter(和 setter)并且数据类型为 Ushort、int 和 String。

执行时我收到此错误提示:

System.Windows.Data 错误:40:BindingExpression 路径错误:'bsdHeader' 属性 未在 'object' ''MainViewModel' (HashCode=19289328)' 上找到。 BindingExpression:Path=狗; DataItem='MainViewModel' (哈希码=19289328);目标元素是 'RadPaneGroup' (Name='');目标 属性 是 'ItemsSource'(类型 'IEnumerable')

编辑:在我将 get/set 添加到 Observable collection dogs 并将 "new ObservableCollection" 部分移动到方法中后,此错误消失了。

public ObservableCollection<Dog> dogs = new ObservableCollection<Dog>();

  public void CreateList()
    {




        foreach(Dog dog in ListofDogs)
        {
            dogs.Add(dog);
        }

    }

<telerik:RadPaneGroup Grid.Row="3"  ItemsSource="{Binding Dog, UpdateSourceTrigger=PropertyChanged}">


    <telerik:RadPane Header="dogs" PaneHeaderVisibility="Hidden">
        <telerik:RadTreeListView>
            <telerik:RadTreeListView.ChildTableDefinitions>
                <telerik:TreeListViewTableDefinition ItemsSource="{Binding color}" />
                <telerik:TreeListViewTableDefinition ItemsSource="{Binding amountOfLegs}" />
                <telerik:TreeListViewTableDefinition ItemsSource="{Binding breed}" />
            </telerik:RadTreeListView.ChildTableDefinitions>
        </telerik:RadTreeListView>
    </telerik:RadPane>
</telerik:RadPaneGroup>

工作xaml:

    <telerik:RadPaneGroup>
        <telerik:RadPane Header="Dogs" PaneHeaderVisibility="Hidden">
            <telerik:RadGridView x:Name="rgv_dogs" 
                                    ItemsSource="{Binding dogs, UpdateSourceTrigger=PropertyChanged}"  ShowGroupPanel="False" >
                <telerik:RadGridView.Columns >
                    <telerik:GridViewDataColumn DataMemberBinding="{Binding color}"/>
                    <telerik:GridViewDataColumn DataMemberBinding="{Binding amountOfLEgs}"/>
                    <telerik:GridViewDataColumn DataMemberBinding="{Binding breed}"/>
                </telerik:RadGridView.Columns>
            </telerik:RadGridView>
        </telerik:RadPane>
   </telerik:RadPaneGroup>

好的,虎头蛇尾的解决方案:我的 Visual Studio 打嗝了?一位同事说可能是一些更新问题。重新启动后代码工作。

我对 Telerik 一无所知 UI,但我认为您可以尝试一些选择:

  1. telerik:RadPaneGroup 的 ItemSource 在您的代码中是 Dog。看起来 Dog 是类型名称,而不是 ObservableCollection<Dog> 的 属性 名称。
  2. 是否在方法中声明了ObservableCollection<Dog> Dogs?据我所知,属性 for ItemSource Binding of XAML Collections 应该是 public 属性 of DataContext,除非绑定发生在代码后面。

我希望这也适用于你。

编辑:我打算写 'can you change public ObservableCollection<Dog> dogs = new ObservableCollection<Dog>(); to public ObservableCollection<Dog> dogs{get;set;} = null;?'。因为没有 getter 和 setter dogs 不被认为是 属性。不过你好像已经更正了那部分。

那么如果您的 telerik 项目仍然没有显示任何内容,我建议您将 CreateList 改回以声明它是自己的 ObservableCollection<Dog> _dogs。但是在末尾添加了像 dogs = _dogs 这样的附加行,以强制触发 dogs 的 INotify属性Changed。如果这也不起作用,您可以查看 Visual Studio 的 'live visual tree' 工具并单击该对象以查看它的 ItemSource 属性。也许绑定发生得很好,但只是没有在视觉上显示出来。