MVVM WPF:当事件被触发时,将控制属性反射到ViewModel
-
02-10-2019 - |
题
好的,我试图了解WPF和流行的MVVM模式。
现在我有这个问题。我正在使用带有几个选项卡的功能区控件。在我的ViewModel中,我有一个属性“ Activetab(String)”,该属性应反映当前活动选项卡。
由于RibbonControl没有任何属性显示此信息,因此我无法绑定到它。
所以我在想:
我可以以这样的方式绑定选定的事件:
<r:RibbonTab Label="tab1" Selected="RibbonTab_Selected"></r:RibbonTab>
<r:RibbonTab Label="tab2" Selected="RibbonTab_Selected"></r:RibbonTab>
<r:RibbonTab Label="tab3" Selected="RibbonTab_Selected"></r:RibbonTab>
<r:RibbonTab Label="tab4" Selected="RibbonTab_Selected"></r:RibbonTab>
<r:RibbonTab Label="tab5" Selected="RibbonTab_Selected"></r:RibbonTab>
然后在CodeBehind中使用activetab = sender.label在ViewModel中设置属性
但是后来我需要在我的观点的代码范围内回复我的ViewModel。
我正在尝试在不使用文件背后的任何代码的情况下解决此问题。 (MVVM)。
现在真正的问题:是否可以使用EventTrigger或EventSetter。 that when the selected event gets fired.启动器自动将Activetab属性设置为发件人。标签值?
仅使用XAML。
- 我的英语不好的借口,也许是鲁尼什的问题。我很新的WPF =)
更新:正如我刚刚发现的那样,Ribbontab上有一个封闭式的财产。
现在,我有一些有关如何将其绑定到ViewModel中的属性的问题。
我尝试了以下代码:
<Style TargetType="{x:Type r:RibbonTab}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="{Binding SelectedTab}" Value="{Binding RelativeSource=Self, Path=Label}" />
</Trigger>
</Style.Triggers>
</Style>
但这无效:
Error 1 Cannot find the Style Property 'SelectedTab' on the type 'Microsoft.Windows.Controls.Ribbon.RibbonTab'.
SelectedTab OffCourse在我的ViewModel中,而不是Ribbontab ...
如何制作设置器,用标签的值将属性设置在我的ViewModel上? =)
提前致谢!!
解决方案
Microsoft Ribbon的8月版本,Ribbontab具有一个依赖的依赖性属性,因此您应该能够与之束缚。
其他提示
我惊讶的是,功能区控制并未将其视为可约束性的属性,但我并没有真正使用它,所以我假设您是对的...
您只能对依赖项属性进行绑定,如果功能区没有主动选项卡依赖项属性,那么您需要自己制作。您可以通过将功能区控件划分为自己的一个,将属性添加到其中并使用选定的事件处理程序来更新其值来做到这一点。另一方面,如果您仅在一个视图上使用它,则可以将属性添加到视图中,而不是对色带进行亚键并与之绑定。
无论哪种方式,您都需要将当前选择的选项卡放入绑定引擎中,以便能够绑定任何内容(标签或ViewModel),并且只能通过依赖项属性进入引擎。因此,您将无法在XAML中完全执行此操作,但是您将可以在不引入视图和ViewModel之间进行耦合而进行操作。
查看WPF的Microsoft Ribbon控件的文档您是否尝试过Ribbon.SelectedItem属性?在我看来,它应该为您提供当前选择的选项卡。