C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

「簡単」すら難しい

過去に社内で使うものはWPFを素のままで作成しましたが、しんどいので
Prismを利用する事にしました。
基本的なサンプルから練習しようとこちらのサイトを参考にさせてもらいました。

簡単MVVM入門 with Prism - Qiita

個人的には、「簡単」すら難しかったです・・・。


VS2017 Community で行っていますが、NuGetパッケージマネージャーは改めて
インストールする必要は無かったです。

「Prism Template Pack」ではなく、NuGetの方の「Prism v5.0.0」です。 
僕が行った際、ターゲットフレームワークは 「.NET Framework 4.0」では、
「Prism.Composition」だけが、インストール出来ませんでした。(悩みました)
最低でも 4.5 は必要なのではないか? と思われます。


まず新規に作成する際、Prismのテンプレートではないです。(ここでも悩みました)
素の「WPFアプリ」から作成し、名前空間の記載から恐らくソリューションの状態は
各フォルダ毎に分けているっぽいので、こんな感じです。
f:id:kandennti:20171102143930p:plain

最後の部分ではViewについてはサラッとしか記載されていないのですが、
こんな感じで動きました。(恐らくPrismには無関係だからでしょう)

xaml

<!-- xaml View/View.xaml -->
<Window x:Class="Calclator.View.View"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Calclator.View"
        mc:Ignorable="d"
        Title="View" Height="140" Width="240">
    
    <Grid>
        <TextBox 
            x:Name="textBox" HorizontalAlignment="Left" Height="25" 
            Margin="10,10,0,0" TextWrapping="Wrap" Text="{Binding Path=X}" 
            VerticalAlignment="Top" Width="120"/>
        
        <TextBox 
            x:Name="textBox_Copy" HorizontalAlignment="Left" Height="25" 
            Margin="10,40,0,0" TextWrapping="Wrap" Text="{Binding Path=Y}" 
            VerticalAlignment="Top" Width="120"/>
        
        <TextBox 
            x:Name="textBox_Copy1" HorizontalAlignment="Left" Height="25" 
            Margin="10,70,0,0" TextWrapping="Wrap" Text="{Binding Path=Ans}" 
            VerticalAlignment="Top" Width="120"/>
        
        <Button 
            x:Name="button" Content="Button" HorizontalAlignment="Left" 
            Margin="140,10,0,0" VerticalAlignment="Top" Width="75" 
            Command="{Binding calcCommand}"/>
    </Grid>
</Window>

答えがTextBoxで良いのかな? とか有りますが、元の記載に合わせました。

コードビハインド側

//cs View.xaml.cs
using System.Windows;
using Calclator.ViewModel;

namespace Calclator.View
{
    /// <summary>
    /// View.xaml の相互作用ロジック
    /// </summary>
    public partial class View : Window
    {
        public View()
        {
            InitializeComponent();
            this.DataContext = new ViewModels();
        }
    }
}

テンプレートで出来あがるXAMLは削除した為、起動時にView.xamlが表示されるように
App.xaml(エントリーポイント?)も修正。

<!-- xaml App.xaml -->
<Application x:Class="Calclator.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Calclator"
             StartupUri="View/View.xaml">
    
    <Application.Resources>
         
    </Application.Resources>
</Application>

何で、C#はこんなにコード書かなきゃいけないんだろう?