将可观察对象集合绑定到RadTreeListView

时间:2020-06-09 06:52:13

标签: c# xaml telerik observablecollection radtreeview

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

在执行过程中,我得到以下错误提示:

System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“ MainViewModel”(HashCode = 19289328)上找不到“ bsdHeader”属性。 BindingExpression:Path = dogs; DataItem ='MainViewModel'(HashCode = 19289328);目标元素是'RadPaneGroup'(Name ='');目标属性为“ ItemsSource”(类型为“ IEnumerable”)

编辑:在我将一个get / set添加到Observable收集狗并将“ 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进行了转载吗?一位同事说可能是一些更新问题。重新启动后,代码即可工作。

1 个答案:

答案 0 :(得分:1)

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

    telerik:RadPaneGroup
  1. ItemSource在您的代码中为Dog。看起来Dog是类型名称,而不是ObservableCollection<Dog>的属性名称。
  2. 在方法中声明了ObservableCollection<Dog> Dogs吗?据我了解,XAML集合的ItemSource绑定属性应该是DataContext的公共属性,但绑定的情况发生在后面的代码中。

我希望这也可以与您合作。

编辑:我要写“您可以将public ObservableCollection<Dog> dogs = new ObservableCollection<Dog>();更改为public ObservableCollection<Dog> dogs{get;set;} = null;吗?”。因为没有getter和setter dogs不被视为属性。但是看来您已经纠正了这一部分。

然后,如果您的telerik项仍然不显示任何内容,建议您改回CreateList以声明它是自己的ObservableCollection<Dog> _dogs。但是,在末尾加上dogs = _dogs之类的附加行,以强制触发dogs的INotifyPropertyChanged。如果这也不起作用,则可以看到Visual Studio的“实时可视树”工具,然后单击该对象以查看其ItemSource属性。绑定可能发生得很好,但只能从视觉上看不到它们。

相关问题