【问题标题】:Silverlight Treeview SelectedItem TwoWay binding causing error in blendSilverlight Treeview SelectedItem TwoWay 绑定导致混合错误
【发布时间】: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?

【问题讨论】:

    标签: silverlight binding treeview selecteditem


    【解决方案1】:

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

      <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 似乎不支持这种形式的绑定感到沮丧。
      猜你喜欢
      • 2010-12-26
      • 2022-01-23
      • 1970-01-01
      • 2011-09-12
      • 2011-06-25
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多