我正在使用wpf开发一个mvvm应用程序。如果文本框中包含文本,则会添加一项要求以阻止用户更改选项卡。
在viewmodel中完全执行此操作的最佳方法是什么?我不知道如何阻止一个tabitem因为tabcontrol中没有dependencyobject命令可以绑定,我是否需要滚动自己的tabcontrol并围绕SelectionChanged事件构建一个ICommand?
我应该简单地(eegad ......不要说)将代码放在SelectionChanged事件中视图后面的代码中吗?
我有没有想过的替代方案?
答案 0 :(得分:5)
您可以考虑将每个TabItems的IsEnabled属性绑定到ViewModel中的属性(例如ViewModel.TabsEnabled),并在文本框具有文本时将该属性设置为False。这样,您就可以从ViewModel启用/禁用这些选项卡,而无需为该特定视图提供代码隐藏文件。
这意味着您将在视图中看到以下内容(假设您的ViewModel是一个名为ViewModel的静态类):
<TabItem IsEnabled="{Binding Source={x:Static local:ViewModel.TabsEnabled}}"/>
然后,当其中一个文本框具有内容时,您只需在ViewModel上设置TabsEnabled属性;有几种方法可以做到这一点,但如果它们绑定到您的ViewModel,您应该有很多机会来监听更改并根据需要设置TabsEnabled。