我在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吗?
答案 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以获取有关行为和触发器的更多信息。希望这会有所帮助。