我正在制作一个 windows phone 7 并尝试使用 MVVM 来完成它。我想让我的视图模型尽可能干净,但我不确定如何制作一个对话框。我正在使用 MVVM light,我知道他们有消息系统或其他东西,但不确定如何使用它。
我想使用 Guide.BeginShowMessageBox
它,因为这似乎提供了比标准对话框更多的功能。
如何在不破坏 MVVM 模式的情况下做到这一点。当我加载视图时,我希望触发加载的触发器,然后检查一些条件。如果满足条件,则显示对话框。
// 虚拟机
public RelayCommand MainPageLoaded
{
get
{
if (!NetworkInterface.GetIsNetworkAvailable())
{
// breaks MVVM now as have view code in viewmodel. Need to take out somehow
Guide.BeginShowMessageBox("Test", "Test network", new List<string>() { "Yes", "No" }, 0, MessageBoxIcon.Warning, asyncResult =>
{
int? returned = Guide.EndShowMessageBox(asyncResult);
// if yes then work offline mode? Maybe another property in ViewModel will get set to say offline mode?
}, null);
}
return null;
}
set
{
// Not sure what to put here.
}
}
// 看法
<i:Interaction.Triggers>
<i:EventTrigger>
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding MainPageLoaded}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
编辑 我遇到的另一个问题是。我有一个绑定到存储在此属性中的一些数据的列表
public ObservableCollection<ContactGroup> ContactGroups { get; set; }
然后点击我有一个应该触发的中继命令
public ICommand GroupContactTapped
{
get
{
return new RelayCommand<GestureEventArgs>(e =>
{
var selectedTextBlock = e.OriginalSource as TextBlock;
MessageBox.Show(selectedTextBlock.Tag.ToString());
});
}
}
然而,我不知道如何在不将源转换为文本块的情况下找到“点击”的对象。