【发布时间】:2014-10-28 01:48:56
【问题描述】:
在带有 MVVM 的 WPF 中,当用户更改选项卡时,很容易触发一些代码。
<TabControl Margin="0 5 5 5" Background="#66F9F9F9" SelectedIndex="{Binding TabIndex}">
然后在 ViewModel 中:
private int _tabIndex;
public int TabIndex
{
get { return _tabIndex; }
set
{
if(_tabIndex != value)
{
_tabIndex = value;
OnPropertyChanged("TabIndex");
if(value == 1)
{
//do something
}
}
}
}
但我对此感到隐隐不安。如果另一个开发人员稍后发生并在“1”位置添加另一个选项卡怎么办。如果这是对应用程序至关重要的代码(确实如此),那么事情将会非常糟糕。
当然,单元测试可以将危险降到最低。但这让我想知道:这是否被视为不好的做法?有没有一种方法可以让您使用字符串而不是 int 来引用 Tab?我尝试绑定到SelectedValue 属性,但更改选项卡时似乎没有任何反应。
【问题讨论】:
-
我也会担心这一点。另一个警告标志是在视图模型中有一个选项卡索引,意味着在视图模型中有基于视图的逻辑,这打破了视图和逻辑的分离。更换标签时需要完成什么?
-
@sondergard 初始选项卡允许用户选择多个对象,这些对象需要在切换到使用新数据的第二个选项卡之前创建并保存到数据库中。