Silverlight Treeview SelectedItem TwoWay 绑定导致混合错误
Posted
技术标签:
【中文标题】Silverlight Treeview SelectedItem TwoWay 绑定导致混合错误【英文标题】:Silverlight Treeview SelectedItem TwoWay binding causing error in blend 【发布时间】:2011-10-29 23:51:28 【问题描述】:我在 Silverlight 4 项目中有一个 Treeview,我想绑定到它的 SelectedItem。当我对 SelectedItem (Mode=TwoWay) 进行绑定时,它会在混合中引发错误,因为 SelectedItem 是只读的,这导致我的 XAML 无法呈现。我不想设置 SelectedItem 属性,我只想知道它何时通过 UI 交互发生变化。在 WPF 中,我只使用 Mode=OneWayToSource 绑定其 SelectedItem,但 Silverlight 不支持该模式 (afaik)。
树视图:
<controls:TreeView ItemsSource="Binding Repository.MajorClasses" SelectedItem="Binding SelectedItem, Mode=TwoWay" />
是否有任何人使用过的解决方法?还有谁知道为什么 Silverlight 中省略了 OneWayToSource?
【问题讨论】:
【参考方案1】:您需要做的是使用交互触发器并将其绑定到SelectedItemChanged
event,如下所示:
<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 了解有关行为和触发器的更多信息。希望这会有所帮助。
【讨论】:
【参考方案2】:如果您只想在用户更改选择时通知您的虚拟机,您应该能够完全按照您正在做的事情(双向绑定)。
我在 Visual Studio 中有这个工作,所以我建议从那里尝试,可能只是 Blend 的问题。 VS intellisense 在 XAML 编辑器中输入时不建议 SelectedItem,但这并不会阻止它工作。
VM 中的绑定属性肯定是正确的类型(从外观上看是 MajorClass)?
【讨论】:
代码按预期运行。我的问题是它在错误列表中显示为错误并阻止 XAML 在设计视图中呈现。【参考方案3】:它真的是只读的,所以你不能这样做。您可以使用 TreeView 作为基本控件并使用可绑定 SelectedItem 的实现创建 CustomTreeView。或创建自己的行为(附加属性)。或者使用一些第三方控制(f.i.telerik)。
【讨论】:
我粘贴的 XAML 在我的软件中确实有效,可能是因为我从未在代码中设置绑定属性。我只对阅读 SelectedItem 属性感兴趣,只是对 Silverlight 似乎不支持这种形式的绑定感到沮丧。以上是关于Silverlight Treeview SelectedItem TwoWay 绑定导致混合错误的主要内容,如果未能解决你的问题,请参考以下文章