質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

1回答

4676閲覧

WPF+MVVM(Livet)でFileOpenDialogの結果を手に入れたい。

picko

総合スコア52

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

1グッド

1クリップ

投稿2016/07/11 06:12

こんにちは。いつもお世話になります。

WPF + Livet + Livet Extensionで、FileOpenDialogの結果をViewのTextBoxに反映したいです。

Window10, Visual Studio2015, WPF4.5, Livet1.3.0.0, LivetExtensions1.0.3.0)の組み合わせです。

LivetWindowのsolutionをつくり、そこにNuGetでLivetExtensionsを入れました。
codeは下記のとおりです。

Q1)buttonを押してもOnOpenFolderCommandExecutedが呼ばれないのはなぜ?
Q2)OpenFolderDialogのResultはどこにあるの?

code中にあるのは参考にしたVBのcodeです。
VB読めないので、C#で書き直せずにいます。
ご示唆ください。

XAML(MainWindow.xaml)

1<Window x:Class="LivetWPFApplication2.Views.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 5 xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 6 xmlns:l="http://schemas.livet-mvvm.net/2011/wpf" 7 xmlns:v="clr-namespace:LivetWPFApplication2.Views" 8 xmlns:vm="clr-namespace:LivetWPFApplication2.ViewModels" 9 Title="MainWindow" Height="162.527" Width="569.6"> 10 11 <Window.DataContext> 12 <vm:MainWindowViewModel/> 13 </Window.DataContext> 14 15 <i:Interaction.Triggers> 16 17 <i:EventTrigger EventName="ContentRendered"> 18 <l:LivetCallMethodAction MethodTarget="{Binding}" MethodName="Initialize"/> 19 </i:EventTrigger> 20 <i:EventTrigger EventName="Closed"> 21 <l:DataContextDisposeAction/> 22 </i:EventTrigger> 23 </i:Interaction.Triggers> 24 25 <Grid Margin="10"> 26 <Grid.RowDefinitions> 27 <RowDefinition Height="40"/> 28 <RowDefinition Height="30"/> 29 <RowDefinition Height="30"/> 30 </Grid.RowDefinitions> 31 <Grid Grid.Row="0" > 32 <Label Content="folder full path" HorizontalAlignment="Left" FontFamily="Meiryo"/> 33 </Grid> 34 <Grid Grid.Row="1" > 35 <Grid.ColumnDefinitions> 36 <ColumnDefinition Width="30"/> 37 <ColumnDefinition Width="*"/> 38 <ColumnDefinition Width="20"/> 39 </Grid.ColumnDefinitions> 40 <TextBox Grid.Column="1" Text="{Binding FilePathText, Mode=TwoWay}" x:Name="SaveFolderTextBox" TextWrapping="NoWrap" FontFamily="Meiryo" FontSize="11"/> 41 </Grid> 42 <Grid Grid.Row="2" > 43 <Grid.ColumnDefinitions> 44 <ColumnDefinition Width="*"/> 45 <ColumnDefinition Width="75"/> 46 <ColumnDefinition Width="75"/> 47 <ColumnDefinition Width="75"/> 48 </Grid.ColumnDefinitions> 49 50 <Button Grid.Column="1" Content="OpenFolder"> 51 <i:Interaction.Triggers> 52 <i:EventTrigger EventName="Click"> 53 <l:FolderBrowserDialogInteractionMessageAction> 54 <l:DirectInteractionMessage CallbackCommand="{Binding OpenFolderCommand}" CallbackMethodName="FolderSelected"> 55 <l:FolderSelectionMessage Description="Select Folder" DialogPreference="None"/> 56 </l:DirectInteractionMessage> 57 </l:FolderBrowserDialogInteractionMessageAction> 58 </i:EventTrigger> 59 </i:Interaction.Triggers> 60 </Button> 61 62 <Button Grid.Column="2" Content="Cancel" Click="CancelButtonClick"/> 63 <Button Grid.Column="3" Content="OK" Click="OkButtonClick"/> 64 </Grid> 65 </Grid> 66</Window>

C#

1using System.Windows; 2 3namespace LivetWPFApplication2.Views 4{ 5 public partial class MainWindow : Window 6 { 7 public MainWindow() 8 { 9 InitializeComponent(); 10 } 11 12 private void OkButtonClick(object sender, RoutedEventArgs e) 13 { 14 this.DialogResult = true; 15 } 16 17 private void CancelButtonClick(object sender, RoutedEventArgs e) 18 { 19 this.DialogResult = false; 20 } 21 } 22} 23

C#(MainWindowViewModel.cs)

1using System.Windows; 2using Livet; 3using Livet.Commands; 4 5namespace LivetWPFApplication2.ViewModels 6{ 7 public class MainWindowViewModel : ViewModel 8 { 9 public void Initialize() 10 { 11 this.OpenFolderCommand = new ViewModelCommand(this.OnOpenFolderCommandExecuted, () => true); 12 } 13 14 public ViewModelCommand OpenFolderCommand { get; set; } 15 public string FilePathText { get; set; } 16 17 private void OnOpenFolderCommandExecuted() 18 { 19 MessageBox.Show("OnOpenFolder"); 20 //TODO translate to C# sample VB code http://d.hatena.ne.jp/hilapon/20111111/1320978112 21 /* 22 # Region "OpenCommand" 23 Private _OpenCommand As ListenerCommand(Of OpeningFileSelectionMessage) 24 Public ReadOnly Property OpenCommand() As ListenerCommand(Of OpeningFileSelectionMessage) 25 Get 26 If _OpenCommand Is Nothing Then 27 _OpenCommand = New ListenerCommand(Of OpeningFileSelectionMessage)(AddressOf Open) 28 End If 29 Return _OpenCommand 30 End Get 31 End Property 32 33 Private Sub Open(ByVal parameter As OpeningFileSelectionMessage) 34 If String.IsNullOrEmpty(parameter.Response) Then Return 35 MessageBox.Show("選択されたファイルは " + parameter.Response + " です。") 36 End Sub 37 #End Region 38 */ 39 } 40 } 41} 42
mondaminZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Livetを駆使したMVVM風アプリ作成のメモ

選択ファイルはOpeningFileSelectionMessage.FileNameです。

投稿2016/07/20 23:42

ozwk

総合スコア13512

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問