private void Menu_Export_Model_Click(object sender, RoutedEventArgs e)
        {
            if (_viewModel.TheModelViewModel.VifModel == null)
            {
                MessageBox.Show(this, "No model currently loaded.", "Error", MessageBoxButton.OK);
                return;
            }
            if (_viewModel.TheModelViewModel.Texture == null)
            {
                MessageBox.Show(this, "Model does not have a texture.", "Error", MessageBoxButton.OK);
                return;
            }

            var dialog = new SaveFileDialog();
            dialog.Filter = "OBJ File|*.obj";
            var result = dialog.ShowDialog(this);

            if (result.GetValueOrDefault(false))
            {
                DataExporters.VifExporter exporter = new VifExporter();

                exporter.WriteObj(dialog.FileName, _viewModel.TheModelViewModel.VifModel, _viewModel.TheModelViewModel.Texture, 1);
            }
        }
        void SaveParsedDataClicked(object sender, RoutedEventArgs e)
        {
            if (_menu.DataContext == null)
                return;

            if (_menu.DataContext is LmpEntryTreeViewModel)
            {
                var lmpEntry = (LmpEntryTreeViewModel)_menu.DataContext;
                var lmpFile = lmpEntry.LmpFileProperty;

                var entry = lmpFile.Directory[lmpEntry.Text];
                var texEntry = lmpFile.Directory[Path.GetFileNameWithoutExtension(lmpEntry.Text)+".tex"];

                var tex = TexDecoder.Decode(lmpFile.FileData, texEntry.StartOffset, texEntry.Length);

                if ((Path.GetExtension(lmpEntry.Text) ?? "").ToLower() != ".vif")
                {
                    MessageBox.Show("Not a .vif file!", "Error");
                    return;
                }

                var dialog = new SaveFileDialog();
                dialog.FileName = lmpEntry.Text+".txt";

                bool? result = dialog.ShowDialog();
                if (result.GetValueOrDefault(false))
                {
                    var exporter = new VifExporter();

                    var logger = new StringLogger();
                    var chunks = VifDecoder.DecodeChunks(
                        logger,
                        lmpFile.FileData,
                        entry.StartOffset,
                        entry.Length,
                        tex.PixelWidth,
                        tex.PixelHeight);

                    exporter.WriteChunks(dialog.FileName, chunks);
                }
            }
            else if (_menu.DataContext is WorldElementTreeViewModel)
            {
                var worldElement = (WorldElementTreeViewModel)_menu.DataContext;
                var lmpEntry = (LmpTreeViewModel)worldElement.Parent;
                var lmpFile = lmpEntry.LmpFileProperty;

                var dialog = new SaveFileDialog();
                dialog.FileName = worldElement.Text + ".txt";

                bool? result = dialog.ShowDialog();
                if (result.GetValueOrDefault(false))
                {
                    var exporter = new VifExporter();

                    var logger = new StringLogger();
                    var chunks = VifDecoder.ReadVerts(
                        logger,
                        lmpFile.FileData,
                        worldElement.WorldElement.VifDataOffset,
                        worldElement.WorldElement.VifDataOffset + worldElement.WorldElement.VifDataLength);

                    exporter.WriteChunks(dialog.FileName, chunks);
                }
            }
        }