如标题所述,我只想绑定我的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进行了转载吗?一位同事说可能是一些更新问题。重新启动后,代码即可工作。
答案 0 :(得分:1)
我对Telerik UI一无所知,但我认为您可以尝试以下选项:
telerik:RadPaneGroup
的Dog
。看起来Dog
是类型名称,而不是ObservableCollection<Dog>
的属性名称。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属性。绑定可能发生得很好,但只能从视觉上看不到它们。