将 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,但我认为您可以尝试一些选择:
telerik:RadPaneGroup
的 ItemSource 在您的代码中是 Dog
。看起来 Dog
是类型名称,而不是 ObservableCollection<Dog>
的 属性 名称。
- 是否在方法中声明了
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 属性。也许绑定发生得很好,但只是没有在视觉上显示出来。
如标题所述,我只想绑定我的 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,但我认为您可以尝试一些选择:
telerik:RadPaneGroup
的 ItemSource 在您的代码中是Dog
。看起来Dog
是类型名称,而不是ObservableCollection<Dog>
的 属性 名称。- 是否在方法中声明了
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 属性。也许绑定发生得很好,但只是没有在视觉上显示出来。