Silverlight Treeview SelectedItem TwoWay绑定导致混合中的错误

时间:2011-08-18 17:10:17

标签: silverlight binding treeview selecteditem

我在Silverlight 4项目中有一个Treeview,我想绑定到它的SelectedItem。当我对SelectedItem(Mode = TwoWay)进行绑定时,它会在blend中抛出一个错误,因为SelectedItem是readonly,这导致我的XAML无法渲染。我不想设置SelectedItem属性,我只是想通过UI交互知道它何时发生变化。在WPF中,我只想使用Mode = OneWayToSource绑定其SelectedItem,但Silverlight不支持该模式(afaik)。

Treeview:

<controls:TreeView ItemsSource="{Binding Repository.MajorClasses}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />

是否有人使用过的解决方法?有人知道为什么Silverlight会省略OneWayToSource吗?

3 个答案:

答案 0 :(得分:1)

这是非常只读,所以你不能这样做。您可以使用TreeView作为基本控件,并使用bindable SelectedItem的实现创建CustomTreeView。或者创建自己的行为(附加属性)。或者使用一些第三方控制(f.i.tlerik)。

答案 1 :(得分:0)

如果您只是希望在用户更改选择时通知您的VM,您应该能够完成您正在做的事情(双向绑定)。

我在Visual Studio中工作,所以我建议从那里尝试,可能只是Blend的一个问题。当在XAML编辑器中输入时,VS intellisense不建议SelectedItem,但这并不能阻止它工作。

VM中的绑定属性肯定是正确的类型(看起来是MajorClass)?

答案 2 :(得分:0)

您需要做的是使用交互式触发器并将其绑定到SelectedItemChanged事件,如下所示:

  <sdk:TreeView x:Name="ModuleNavigationItemWrappersTreeView" ItemsSource="{Binding ModuleNavigationItemWrappers}">
                        <sdk:TreeView.ItemTemplate>
                            <sdk:HierarchicalDataTemplate ItemsSource="{Binding Children}">
                                <StackPanel Orientation="Horizontal" Margin="0,2,0,2">
                                    <Image Source="/VanguardFinancials.Common;component/Images/icons/flag_blue.png" />
                                    <TextBlock Margin="2,0,0,0" Text="{Binding ItemDescription}"></TextBlock>
                                </StackPanel>
                            </sdk:HierarchicalDataTemplate>
                        </sdk:TreeView.ItemTemplate>
                        <interactivity:Interaction.Triggers>
                            <interactivity:EventTrigger EventName="SelectedItemChanged">
                                <interactivity:InvokeCommandAction Command="{Binding TrackSelectedModuleNavigationItemWrapper}" CommandParameter="{Binding ElementName=ModuleNavigationItemWrappersTreeView}" />
                            </interactivity:EventTrigger>
                        </interactivity:Interaction.Triggers>
                    </sdk:TreeView>

访问this以获取有关行为和触发器的更多信息。希望这会有所帮助。