Voice ViewModel层
private MenuWindow _menuWindow = <span style="color:#ff0000;">new MenuWindow()</span>;
_menuWindow.DisplayDiffDishes(answer);
Menu View 层
MenuWindow.xaml<Window x:Class="RobotPlatform.MenuWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:RobotPlatform"
mc:Ignorable="d" Width="567" Height="377" WindowStyle="None">
<Canvas Margin="0,0,2,0">
<Image <span style="color:#ff0000;">Source ="{Binding Path=ImageSource, Mode=TwoWay}"</span> Width="567" Height="377" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</Canvas>
</Window>
MenuWindow.xaml.cs
public partial class MenuWindow:Window
{
private MenuDisplayViewModel _viewModel;
public MenuDisplayViewModel <span style="color:#ff0000;">ViewModel</span>
{
get
{
if (_viewModel == null)
{
_viewModel = <span style="color:#ff0000;">new MenuDisplayViewModel(this)</span>;
}
return _viewModel;
}
}
public MenuWindow()
{
InitializeComponent();
<span style="color:#ff0000;">DataContext = ViewModel;</span>
Loaded += (o, args) =>
{
UserInterfaceHelper.UpdateGivenWindowLocation(this, Location.Right, Location.Top);
};
}
public void DisplayDiffDishes(string dishName)
{
_viewModel.DisplayDiffDishes(dishName);
}
public void ShowMenuWindow()
{
Dispatcher.Invoke(Show);
}
public void HideMenuWindow()
{
Dispatcher.Invoke(Hide);
}
}
ViewModel层
public class MenuDisplayViewModel:ViewModelBase
{
private Uri[] _outPutImage;
private string[] _imgPathName;
private bool _isIntervalDisplay = false;
private ImageSource _imageSource;
private MenuWindow _menuWindow;
//TODO:viewmodel依赖于view,还需解构
public MenuDisplayViewModel(MenuWindow window)
{
_menuWindow = window;
}
private string[] ImgPathName
{
get
{
if (_imgPathName == null)
{
_imgPathName = Directory.GetFiles(Directory.GetCurrentDirectory() + "\\AppData\\Dishes", "*jpg");
}
return _imgPathName;
}
}
public ImageSource ImageSource
{
get
{
return _imageSource;
}
set
{
_imageSource = value;
<span style="color:#ff0000;">NotifyPropertyChanged("ImageSource");</span>
}
}
public void DisplayDiffDishes(string dishName)
{
_outPutImage = new Uri[dishName.Length];
for(int i = 0; i<ImgPathName.Length; i++)
{
string imgName = Path.GetFileNameWithoutExtension(ImgPathName[i]);
if (dishName.IndexOf(imgName) != -1)
{
_outPutImage[dishName.IndexOf(imgName)] = new Uri(ImgPathName[i]);
_isIntervalDisplay = true;
}
}
if (_isIntervalDisplay)
{
<span style="white-space:pre"> </span>task.Start()开新线程
<span style="background-color: rgb(255, 255, 255);"><span style="color:#ff0000;">Task task = new Task(IntervalDisplay);
task.Start();</span></span>
}
}
public void IntervalDisplay()
{
_menuWindow.ShowMenuWindow();
for (int i = 0; i < _outPutImage.Length; i++)
{
if (_outPutImage[i] != null)
{
<span style="white-space:pre"> </span> 线程调度回主线程(UI)
<span style="color:#ff0000;">Application.Current.Dispatcher.Invoke(() =>
{
ImageSource = new BitmapImage(_outPutImage[i]);
});</span>
Thread.Sleep(1500);
}
}
_menuWindow.HideMenuWindow();
}
}