• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags

Frequently used words (click to add to your profile)

javaandroidc++linuxc#windowsobjective-ccocoaqt誰得pythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

http://sourceforge.jp/projects/futonwriter/の旧リポジトリ


Commit MetaInfo

Revisionfab5760d4d41e7bdd0c3bb7da57b4325ebfcd20d (tree)
Zeit2011-05-19 21:38:57
Autorazyobuzin <azyobuzin@user...>
Commiterazyobuzin

Log Message

投稿できるようになった!

Ändern Zusammenfassung

Diff

--- a/HatenaDiaryClient/App.xaml.cs
+++ b/HatenaDiaryClient/App.xaml.cs
@@ -1,7 +1,6 @@
11 using System;
22 using System.Collections.Generic;
33 using System.Configuration;
4-using System.Data;
54 using System.Linq;
65 using System.Windows;
76
@@ -17,7 +16,7 @@ namespace Azyobuzi.HatenaDiaryClient
1716 private void Application_Startup(object sender, StartupEventArgs e)
1817 {
1918 DispatcherHelper.UIDispatcher = Dispatcher;
20- AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
19+ //AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
2120 }
2221
2322 //集約エラーハンドラ
--- a/HatenaDiaryClient/HatenaDiaryClient.csproj
+++ b/HatenaDiaryClient/HatenaDiaryClient.csproj
@@ -37,23 +37,26 @@
3737 <ItemGroup>
3838 <Reference Include="Livet, Version=0.9.2011.429, Culture=neutral, processorArchitecture=MSIL">
3939 <SpecificVersion>False</SpecificVersion>
40- <HintPath>..\..\..\..\AppData\Local\Temporary Projects\HatenaDiaryClient\InfrastructureAssemblies\Livet.dll</HintPath>
40+ <HintPath>InfrastructureAssemblies\Livet.dll</HintPath>
4141 </Reference>
4242 <Reference Include="Microsoft.Expression.Interactions">
4343 <SpecificVersion>False</SpecificVersion>
44- <HintPath>..\..\..\..\AppData\Local\Temporary Projects\HatenaDiaryClient\InfrastructureAssemblies\Microsoft.Expression.Interactions.dll</HintPath>
44+ <HintPath>InfrastructureAssemblies\Microsoft.Expression.Interactions.dll</HintPath>
45+ </Reference>
46+ <Reference Include="Okazuki.BehaviorSupport, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
47+ <SpecificVersion>False</SpecificVersion>
48+ <HintPath>InfrastructureAssemblies\Okazuki.BehaviorSupport.dll</HintPath>
49+ <Private>False</Private>
4550 </Reference>
4651 <Reference Include="System" />
47- <Reference Include="System.Data" />
4852 <Reference Include="System.Windows.Interactivity">
4953 <SpecificVersion>False</SpecificVersion>
50- <HintPath>..\..\..\..\AppData\Local\Temporary Projects\HatenaDiaryClient\InfrastructureAssemblies\System.Windows.Interactivity.dll</HintPath>
54+ <HintPath>InfrastructureAssemblies\System.Windows.Interactivity.dll</HintPath>
5155 </Reference>
5256 <Reference Include="System.Xml" />
5357 <Reference Include="Microsoft.CSharp" />
5458 <Reference Include="System.Core" />
5559 <Reference Include="System.Xml.Linq" />
56- <Reference Include="System.Data.DataSetExtensions" />
5760 <Reference Include="System.Xaml">
5861 <RequiredTargetFramework>4.0</RequiredTargetFramework>
5962 </Reference>
@@ -66,6 +69,11 @@
6669 <Generator>MSBuild:Compile</Generator>
6770 <SubType>Designer</SubType>
6871 </ApplicationDefinition>
72+ <Compile Include="Models\Settings.cs" />
73+ <Compile Include="ViewModels\SettingsWindowViewModel.cs" />
74+ <Compile Include="Views\SettingsWindow.xaml.cs">
75+ <DependentUpon>SettingsWindow.xaml</DependentUpon>
76+ </Compile>
6977 <Page Include="Views\MainWindow.xaml">
7078 <Generator>MSBuild:Compile</Generator>
7179 <SubType>Designer</SubType>
@@ -74,6 +82,7 @@
7482 <DependentUpon>App.xaml</DependentUpon>
7583 <SubType>Code</SubType>
7684 </Compile>
85+ <Compile Include="Models\BlogItem.cs" />
7786 <Compile Include="Models\Hatena\BlogEntry.cs" />
7887 <Compile Include="Models\Hatena\FotolifeEntry.cs" />
7988 <Compile Include="Models\Hatena\HatenaDiary.cs" />
@@ -86,6 +95,10 @@
8695 <DependentUpon>MainWindow.xaml</DependentUpon>
8796 <SubType>Code</SubType>
8897 </Compile>
98+ <Page Include="Views\SettingsWindow.xaml">
99+ <SubType>Designer</SubType>
100+ <Generator>MSBuild:Compile</Generator>
101+ </Page>
89102 </ItemGroup>
90103 <ItemGroup>
91104 <Compile Include="Properties\AssemblyInfo.cs">
@@ -115,9 +128,12 @@
115128 <Resource Include="Images\Send Document.png" />
116129 <Content Include="InfrastructureAssemblies\Design\Livet.Design.dll" />
117130 <Content Include="InfrastructureAssemblies\Design\Livet.Expression.Design.dll" />
131+ <Content Include="InfrastructureAssemblies\Design\Okazuki.BehaviorSupport.Design.Commons.dll" />
132+ <Content Include="InfrastructureAssemblies\Design\Okazuki.BehaviorSupport.VisualStudio.Design.dll" />
118133 <Content Include="InfrastructureAssemblies\Livet.dll" />
119134 <Resource Include="InfrastructureAssemblies\Livet.XML" />
120135 <Content Include="InfrastructureAssemblies\Microsoft.Expression.Interactions.dll" />
136+ <Content Include="InfrastructureAssemblies\Okazuki.BehaviorSupport.dll" />
121137 <Content Include="InfrastructureAssemblies\System.Windows.Interactivity.dll" />
122138 </ItemGroup>
123139 <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Binary files a/HatenaDiaryClient/InfrastructureAssemblies/Design/Livet.Design.dll and b/HatenaDiaryClient/InfrastructureAssemblies/Design/Livet.Design.dll differ
Binary files a/HatenaDiaryClient/InfrastructureAssemblies/Design/Livet.Expression.Design.dll and b/HatenaDiaryClient/InfrastructureAssemblies/Design/Livet.Expression.Design.dll differ
Binary files /dev/null and b/HatenaDiaryClient/InfrastructureAssemblies/Design/Okazuki.BehaviorSupport.Design.Commons.dll differ
Binary files /dev/null and b/HatenaDiaryClient/InfrastructureAssemblies/Design/Okazuki.BehaviorSupport.VisualStudio.Design.dll differ
--- a/HatenaDiaryClient/InfrastructureAssemblies/Livet.XML
+++ b/HatenaDiaryClient/InfrastructureAssemblies/Livet.XML
@@ -4,27 +4,32 @@
44 <name>Livet</name>
55 </assembly>
66 <members>
7- <member name="T:Livet.Messaging.File.SelectOpenFileMessage">
7+ <member name="T:Livet.IWeakEventListenerHaving">
88 <summary>
9- ファイルを開く アクション用の相互作用メッセージです。
9+ IWeakEventListenerのリストを持つクラスです。
10+ 通常このリストにIWeakEventListenerを追加することで、<br/>
11+ IWeakEventListenerとこのインターフェースを実装したオブジェクトのライフサイクルを一致させます。
1012 </summary>
1113 </member>
12- <member name="T:Livet.Messaging.File.SelectFileMessage">
14+ <member name="T:Livet.Behaviors.Messaging.DirectInteractionMessage">
1315 <summary>
14- ファイルを開く・ファイルを保存するアクション用の共通相互作用メッセージ基底抽象クラスです。<br/>
15- ファイルを開くアクションをViewに行わせたい場合は、SelectOpenFileMessageを使用してください。<br/>
16- ファイルを保存するアクションをViewに行わせたい場合は、SelectSaveFileMessageを使用してください。
16+ Viewから直接相互作用メッセージを定義する際に使用します。
1717 </summary>
1818 </member>
19- <member name="T:Livet.Messaging.InteractionResponsibleMessage`1">
19+ <member name="P:Livet.Behaviors.Messaging.DirectInteractionMessage.Message">
2020 <summary>
21- 戻り値のある相互作用メッセージの基底クラスです。
21+ 相互作用メッセージ(各種InteractionMessage)を指定、または取得します。
2222 </summary>
23- <typeparam name="T"></typeparam>
2423 </member>
25- <member name="T:Livet.Messaging.InteractionResponsibleMessage">
24+ <member name="P:Livet.Behaviors.Messaging.DirectInteractionMessage.CallbackCommand">
2625 <summary>
27- 戻り値のある相互作用メッセージの抽象基底クラスです。
26+ アクション実行後に実行するコマンドを指定、または取得します<br/>
27+ このプロパティが設定されていた場合、アクションの実行後アクションの実行に使用した相互作用メッセージをパラメータとしてコマンドを呼び出します。
28+ </summary>
29+ </member>
30+ <member name="T:Livet.Messaging.InformationMessage">
31+ <summary>
32+ 情報をViewに通知するためのメッセージです。
2833 </summary>
2934 </member>
3035 <member name="T:Livet.Messaging.InteractionMessage">
@@ -51,766 +56,756 @@
5156 メッセージキーを指定、または取得します。
5257 </summary>
5358 </member>
54- <member name="M:Livet.Messaging.InteractionResponsibleMessage`1.#ctor(System.String)">
59+ <member name="M:Livet.Messaging.InformationMessage.#ctor(System.String,System.String,System.String)">
5560 <summary>
56- メッセージキーを使用して、戻り値のある新しい相互作用メッセージのインスタンスを生成します
61+ 表示するメッセージ・キャプション・メッセージキーを指定して、新しい相互作用メッセージのインスタンスを生成します。
5762 </summary>
63+ <param name="text">表示するメッセージ</param>
64+ <param name="caption">キャプション</param>
5865 <param name="messageKey">メッセージキー</param>
5966 </member>
60- <member name="M:Livet.Messaging.InteractionResponsibleMessage`1.CreateInstanceCore">
61- <summary>
62- 派生クラスでは必ずオーバーライドしてください。Freezableオブジェクトとして必要な実装です。<br/>
63- 通常このメソッドは、自身の新しいインスタンスを返すように実装します。
64- </summary>
65- <returns>自身の新しいインスタンス</returns>
66- </member>
67- <member name="P:Livet.Messaging.InteractionResponsibleMessage`1.Response">
67+ <member name="M:Livet.Messaging.InformationMessage.#ctor(System.String,System.String,System.Windows.MessageBoxImage,System.String)">
6868 <summary>
69- 戻り値情報
69+ 表示するメッセージ・キャプション・メッセージボックスイメージ・メッセージキーを指定して、新しい相互作用メッセージのインスタンスを生成します。
7070 </summary>
71+ <param name="text">表示するメッセージ</param>
72+ <param name="caption">キャプション</param>
73+ <param name="image">メッセージボックスイメージ</param>
74+ <param name="messageKey">メッセージキー</param>
7175 </member>
72- <member name="M:Livet.Messaging.File.SelectFileMessage.CreateInstanceCore">
76+ <member name="M:Livet.Messaging.InformationMessage.CreateInstanceCore">
7377 <summary>
7478 派生クラスでは必ずオーバーライドしてください。Freezableオブジェクトとして必要な実装です。<br/>
7579 通常このメソッドは、自身の新しいインスタンスを返すように実装します。
7680 </summary>
7781 <returns>自身の新しいインスタンス</returns>
7882 </member>
79- <member name="P:Livet.Messaging.File.SelectFileMessage.Title">
83+ <member name="P:Livet.Messaging.InformationMessage.Text">
8084 <summary>
81- ダイアログタイトルを指定、または取得します。
85+ 表示するメッセージを指定、または取得します。
8286 </summary>
8387 </member>
84- <member name="P:Livet.Messaging.File.SelectFileMessage.Filter">
88+ <member name="P:Livet.Messaging.InformationMessage.Caption">
8589 <summary>
86- ファイルの拡張子Filterを指定、または取得します。
90+ キャプションを指定、または取得します。
8791 </summary>
8892 </member>
89- <member name="P:Livet.Messaging.File.SelectFileMessage.AddExtension">
93+ <member name="P:Livet.Messaging.InformationMessage.Image">
9094 <summary>
91- 拡張子を指定しなかった場合、自動で拡張子を追加するかどうかを指定、または取得します。デフォルトはtrueです。
95+ メッセージボックスイメージを指定、または取得します。
9296 </summary>
9397 </member>
94- <member name="M:Livet.Messaging.File.SelectOpenFileMessage.#ctor(System.String)">
98+ <member name="T:Livet.ViewModel">
9599 <summary>
96- メッセージキーを指定して新しい相互作用メッセージのインスタンスを生成します。
100+ ViewModelの基底クラスです。
97101 </summary>
98- <param name="messageKey">メッセージキー</param>
99102 </member>
100- <member name="M:Livet.Messaging.File.SelectOpenFileMessage.CreateInstanceCore">
103+ <member name="T:Livet.NotifyObject">
101104 <summary>
102- 派生クラスでは必ずオーバーライドしてください。Freezableオブジェクトとして必要な実装です。<br/>
103- 通常このメソッドは、自身の新しいインスタンスを返すように実装します。
105+ 変更通知オブジェクトの基底クラスです。
104106 </summary>
105- <returns>自身の新しいインスタンス</returns>
106107 </member>
107- <member name="P:Livet.Messaging.File.SelectOpenFileMessage.MultiSelect">
108+ <member name="M:Livet.NotifyObject.RaisePropertyChanged``1(System.Linq.Expressions.Expression{System.Func{``0}})">
108109 <summary>
109- 複数ファイルを選択可能かを取得、または設定します。
110+ プロパティ変更通知イベントを発生させます。
110111 </summary>
112+ <param name="propertyExpression">() => プロパティ形式のラムダ式</param>
111113 </member>
112- <member name="T:Livet.Behaviors.Messaging.InteractionTransitionAction">
114+ <member name="M:Livet.NotifyObject.RaisePropertyChanged(System.String)">
113115 <summary>
114- 画面遷移(Window)を行うアクションです。TransitionMessageに対応します。
116+ プロパティ変更通知イベントを発生させます
115117 </summary>
118+ <param name="propertyName">プロパティ名</param>
116119 </member>
117- <member name="T:Livet.Behaviors.Messaging.InteractionMessageAction`1">
120+ <member name="E:Livet.NotifyObject.PropertyChanged">
118121 <summary>
119- ViewModelからの相互作用メッセージに対応するアクションの基底抽象クラスです<br/>
120- 独自のアクションを定義する場合はこのクラスを継承してください。
122+ プロパティ変更通知イベントです。
121123 </summary>
122- <typeparam name="T">このアクションがアタッチ可能な型を示します。</typeparam>
123124 </member>
124- <member name="P:Livet.Behaviors.Messaging.InteractionMessageAction`1.DirectInteractionMessage">
125+ <member name="P:Livet.NotifyObject.ListenerList">
125126 <summary>
126- Viewで直接相互作用メッセージを定義する場合に使用する、DirectInteractionMessageを指定、または取得します。
127+ このクラスが購読するWeakEventのListenerの参照を確保するためのリストです。
128+ このクラスインスタンスの生存期間の間、保持しておきたいIWeakEventLisntenerはこのリストに入れてください。
127129 </summary>
128130 </member>
129- <member name="P:Livet.Behaviors.Messaging.InteractionTransitionAction.WindowType">
131+ <member name="P:Livet.ViewModel.Messenger">
130132 <summary>
131- 遷移するウインドウの型を指定、または取得します。
133+ このViewModelクラスの基本Messegerインスタンスです。
132134 </summary>
133135 </member>
134- <member name="P:Livet.Behaviors.Messaging.InteractionTransitionAction.Mode">
136+ <member name="T:Livet.Messaging.ConfirmMessage">
135137 <summary>
136- 画面遷移の種類を指定するTransitionMode列挙体を指定、または取得します。<br/>
137- TransitionMessageでModeがUnKnown以外に指定されていた場合、そちらが優先されます。
138+ 確認相互作用メッセージを表します。
138139 </summary>
139140 </member>
140- <member name="T:Livet.Messaging.Window.WindowActionMessage">
141+ <member name="T:Livet.Messaging.InteractionResponsibleMessage`1">
141142 <summary>
142- Windowを最大化・最小化・閉じる・通常化させるための相互作用メッセージです。
143+ 戻り値のある相互作用メッセージの基底クラスです。
143144 </summary>
145+ <typeparam name="T"></typeparam>
144146 </member>
145- <member name="M:Livet.Messaging.Window.WindowActionMessage.#ctor(System.String)">
147+ <member name="T:Livet.Messaging.InteractionResponsibleMessage">
146148 <summary>
147- メッセージキーを指定して新しい相互作用メッセージのインスタンスを生成します。
149+ 戻り値のある相互作用メッセージの抽象基底クラスです。
148150 </summary>
149- <param name="messageKey">メッセージキー</param>
150151 </member>
151- <member name="M:Livet.Messaging.Window.WindowActionMessage.#ctor(System.String,Livet.Messaging.Window.WindowAction)">
152+ <member name="M:Livet.Messaging.InteractionResponsibleMessage`1.#ctor(System.String)">
152153 <summary>
153- メッセージキーとWindowが遷移すべき状態を定義して、新しい相互作用メッセージのインスタンスを生成します。
154+ メッセージキーを使用して、戻り値のある新しい相互作用メッセージのインスタンスを生成します
154155 </summary>
155156 <param name="messageKey">メッセージキー</param>
156- <param name="action">Windowが遷移すべき状態を表すWindowAction列挙体</param>
157157 </member>
158- <member name="M:Livet.Messaging.Window.WindowActionMessage.CreateInstanceCore">
158+ <member name="M:Livet.Messaging.InteractionResponsibleMessage`1.CreateInstanceCore">
159159 <summary>
160160 派生クラスでは必ずオーバーライドしてください。Freezableオブジェクトとして必要な実装です。<br/>
161161 通常このメソッドは、自身の新しいインスタンスを返すように実装します。
162162 </summary>
163163 <returns>自身の新しいインスタンス</returns>
164164 </member>
165- <member name="P:Livet.Messaging.Window.WindowActionMessage.Action">
165+ <member name="P:Livet.Messaging.InteractionResponsibleMessage`1.Response">
166166 <summary>
167- Windowが遷移すべき状態を表すWindowAction列挙体を指定、または取得します。
167+ 戻り値情報
168168 </summary>
169169 </member>
170- <member name="T:Livet.Behaviors.Messaging.Window.InteractionWindowAction">
170+ <member name="M:Livet.Messaging.ConfirmMessage.#ctor(System.String,System.String,System.String)">
171171 <summary>
172- Windowの最小化・最大化・閉じるを行うアクションです。WindowActionMessageに対応します。
172+ 表示するメッセージ・キャプション・メッセージキーを指定して、新しい相互作用メッセージのインスタンスを生成します。
173173 </summary>
174+ <param name="text">表示するメッセージ</param>
175+ <param name="caption">キャプション</param>
176+ <param name="messageKey">メッセージキー</param>
174177 </member>
175- <member name="F:Livet.Messaging.TransitionMode.Normal">
178+ <member name="M:Livet.Messaging.ConfirmMessage.#ctor(System.String,System.String,System.Windows.MessageBoxImage,System.String)">
176179 <summary>
177- 新しくWindowを開きます。
180+ 表示するメッセージ・キャプション・メッセージボックスイメージ・メッセージキーを指定して、新しい相互作用メッセージのインスタンスを生成します。
178181 </summary>
182+ <param name="text">表示するメッセージ</param>
183+ <param name="caption">キャプション</param>
184+ <param name="image">メッセージボックスイメージ</param>
185+ <param name="messageKey">メッセージキー</param>
179186 </member>
180- <member name="F:Livet.Messaging.TransitionMode.Modal">
187+ <member name="M:Livet.Messaging.ConfirmMessage.#ctor(System.String,System.String,System.Windows.MessageBoxImage,System.Windows.MessageBoxButton,System.String)">
181188 <summary>
182- 新しいWindowをモーダルダイアログとして開きます。
189+ 表示するメッセージ・キャプション・メッセージボックスイメージ・メッセージボックスボタン・メッセージキーを指定して、新しい相互作用メッセージのインスタンスを生成します。
183190 </summary>
191+ <param name="text">表示するメッセージ</param>
192+ <param name="caption">キャプション</param>
193+ <param name="image">メッセージボックスイメージ</param>
194+ <param name="button">メッセージボックスボタン</param>
195+ <param name="messageKey">メッセージキー</param>
184196 </member>
185- <member name="F:Livet.Messaging.TransitionMode.NewOrActive">
197+ <member name="M:Livet.Messaging.ConfirmMessage.CreateInstanceCore">
186198 <summary>
187- すでに同じ型のWindowが開かれている場合はそのWindowをアクティブにします。<br/>
188- 同じ型のWindowが開かれていなかった場合、新しくWindowを開きます。
199+ 派生クラスでは必ずオーバーライドしてください。Freezableオブジェクトとして必要な実装です。<br/>
200+ 通常このメソッドは、自身の新しいインスタンスを返すように実装します。
189201 </summary>
202+ <returns>自身の新しいインスタンス</returns>
190203 </member>
191- <member name="F:Livet.Messaging.TransitionMode.UnKnown">
204+ <member name="P:Livet.Messaging.ConfirmMessage.Text">
192205 <summary>
193- 指定されていません。Windowは表示されません。
206+ 表示するメッセージを指定、または取得します。
194207 </summary>
195208 </member>
196- <member name="T:Livet.ViewModelHelper">
209+ <member name="P:Livet.Messaging.ConfirmMessage.Caption">
197210 <summary>
198- ViewModelの作成と実行をサポートするユーティリティクラスです。
211+ キャプションを指定、または取得します。
199212 </summary>
200213 </member>
201- <member name="M:Livet.ViewModelHelper.CreateReadOnlyNotifyDispatcherCollection``2(System.Collections.ObjectModel.ObservableCollection{``1},System.Func{``1,``0},System.Windows.Threading.Dispatcher)">
214+ <member name="P:Livet.Messaging.ConfirmMessage.Image">
202215 <summary>
203- 既存のObservableCollectionと同期された、読み取り専用のDispatcherCollectionを作成します。
216+ メッセージボックスイメージを指定、または取得します。
204217 </summary>
205- <typeparam name="TTargetItem">作成するReadOnlyNotifyDispatcherCollectionのコレクションアイテムの型</typeparam>
206- <typeparam name="TSourceItem">基となるObservableCollectionのコレクションアイテムの型</typeparam>
207- <param name="source">基となるObservableCollection</param>
208- <param name="create">TSourceItemからTTargetItemへの変換Func</param>
209- <param name="dispatcher">作成するコレクションに関連づけられるDispatcher</param>
210- <returns>ReadOnlyNotifyDispatcherCollection</returns>
211218 </member>
212- <member name="M:Livet.ViewModelHelper.BindNotifyChanged(System.ComponentModel.INotifyPropertyChanged,Livet.IWeakEventListenerHaving,System.ComponentModel.PropertyChangedEventHandler)">
219+ <member name="P:Livet.Messaging.ConfirmMessage.Button">
213220 <summary>
214- イベントハンドラとINotifyPropertyChanged(Model、あるいは他のViewModel)からのPropertyChangedイベントをWeakEventで紐づけします。
221+ メッセージボックスボタンを指定、または取得します。
215222 </summary>
216- <param name="source">Model(INotifyPropertyChanged)</param>
217- <param name="lifecycleObject">このイベントの購読期間をそのライフサイクルと一致させたいオブジェクトです。通常このパラメータはViewModelを指します。</param>
218- <param name="handler">PropertyChangedEventHandler</param>
219223 </member>
220- <member name="M:Livet.ViewModelHelper.BindNotifyCollectionChanged(System.Collections.Specialized.INotifyCollectionChanged,Livet.IWeakEventListenerHaving,System.Collections.Specialized.NotifyCollectionChangedEventHandler)">
224+ <member name="T:Livet.ReadOnlyNotifyDispatcherCollection`1">
221225 <summary>
222- イベントハンドラとINotifyCollectionChanged(ObservableCollection)からのCollectionChangedイベントをWeakEventで紐づけします。
226+ DispatcherCollectionの読み取り専用ラッパーです。<br/>
227+ ReadOnlyObservableCollectionなどと異なり、ソースコレクションの変更によってコレクションが変更された場合、<br/>
228+ 変更通知を行います。
223229 </summary>
224- <param name="source">INotifyCollectionChangedオブジェクト</param>
225- <param name="lifecycleObject">このイベントの購読期間をそのライフサイクルと一致させたいオブジェクトです。通常このパラメータはViewModelを指します。</param>
226- <param name="handler">NotifyCollectionChangedEventHandler</param>
230+ <typeparam name="T">コレクションアイテムの型</typeparam>
227231 </member>
228- <member name="M:Livet.ViewModelHelper.BindNotification(Livet.Notificator,Livet.IWeakEventListenerHaving,System.EventHandler{Livet.NotificationRaisedEventArgs})">
232+ <member name="P:Livet.ReadOnlyNotifyDispatcherCollection`1.Dispatcher">
229233 <summary>
230- イベントハンドラとNotificatorからのRaisedイベントをWeakEventで紐づけします。
234+ このコレクションが変更通知を行うDispatcherを取得します。
231235 </summary>
232- <param name="source">Notificatorオブジェクト</param>
233- <param name="lifecycleObject">このイベントの購読期間をそのライフサイクルと一致させたいオブジェクトです。通常このパラメータはViewModelを指します。</param>
234- <param name="handler">EventHandler - NotificationRaisedEventArgs</param>
235236 </member>
236- <member name="T:Livet.Messaging.File.SelectSaveFileMessage">
237+ <member name="P:Livet.ReadOnlyNotifyDispatcherCollection`1.ListenerList">
237238 <summary>
238- ファイルを保存する 用の相互作用メッセージです。
239+ このクラスが購読するWeakEventのListenerの参照を確保するためのリストです。
240+ このクラスインスタンスの生存期間の間、保持しておきたいIWeakEventLisntenerはこのリストに入れてください。
239241 </summary>
240242 </member>
241- <member name="M:Livet.Messaging.File.SelectSaveFileMessage.#ctor(System.String)">
243+ <member name="T:Livet.Notificator`1">
242244 <summary>
243- メッセージキーを指定して新しい相互作用メッセージのインスタンスを生成します。
245+ 汎用変更通知オブジェクトです。通常ModelからViewModel(あるいは他のModelオブジェクト)への通知としてイベントの代わりに使用します。
244246 </summary>
245- <param name="messageKey">メッセージキー</param>
247+ <typeparam name="T">イベント引数型</typeparam>
246248 </member>
247- <member name="M:Livet.Messaging.File.SelectSaveFileMessage.CreateInstanceCore">
249+ <member name="M:Livet.Notificator`1.Raise(`0)">
248250 <summary>
249- 派生クラスでは必ずオーバーライドしてください。Freezableオブジェクトとして必要な実装です。<br/>
250- 通常このメソッドは、自身の新しいインスタンスを返すように実装します。
251+ イベントをNotificatorを利用して通知します。
251252 </summary>
252- <returns>自身の新しいインスタンス</returns>
253+ <param name="args">イベント引数う</param>
253254 </member>
254- <member name="P:Livet.Messaging.File.SelectSaveFileMessage.CreatePrompt">
255+ <member name="E:Livet.Notificator`1.Raised">
255256 <summary>
256- ユーザーが存在しないファイルを指定した場合に、ファイルを作成することを確認するメッセージを表示するかどうかを指定、または取得します。デフォルトはfalseです。
257+ 通知が発生した時に発生するイベントです。
257258 </summary>
258259 </member>
259- <member name="P:Livet.Messaging.File.SelectSaveFileMessage.OverwritePrompt">
260+ <member name="T:Livet.Behaviors.Messaging.InteractionMessageAction`1">
260261 <summary>
261- ユーザーが指定したファイルが存在する場合、上書き確認メッセージを表示するかどうかを指定、または取得します。デフォルトはtrueです。
262+ ViewModelからの相互作用メッセージに対応するアクションの基底抽象クラスです<br/>
263+ 独自のアクションを定義する場合はこのクラスを継承してください。
262264 </summary>
265+ <typeparam name="T">このアクションがアタッチ可能な型を示します。</typeparam>
263266 </member>
264- <member name="T:Livet.Behaviors.Messaging.File.InteractionOpenFileDialogAction">
267+ <member name="P:Livet.Behaviors.Messaging.InteractionMessageAction`1.DirectInteractionMessage">
265268 <summary>
266- 「ファイルを開く」ダイアログを表示するアクションです。SelectOpenFileMessageに対応します。
269+ Viewで直接相互作用メッセージを定義する場合に使用する、DirectInteractionMessageを指定、または取得します。
267270 </summary>
268271 </member>
269- <member name="T:Livet.Notificator">
272+ <member name="T:Livet.Behaviors.Messaging.InteractionInformationDialogAction">
270273 <summary>
271- 汎用変更通知オブジェクトです。通常ModelからViewModelへの通知としてイベントの代わりに使用します。
274+ 情報ダイアログを表示するアクションです。InformationMessageに対応します。
272275 </summary>
273276 </member>
274- <member name="M:Livet.Notificator.Raise(System.String)">
277+ <member name="T:Livet.Behaviors.Messaging.Window.InteractionWindowAction">
275278 <summary>
276- 識別子をつけて通知します。
279+ Windowの最小化・最大化・閉じるを行うアクションです。WindowActionMessageに対応します。
277280 </summary>
278- <param name="token">識別子文字列</param>
279281 </member>
280- <member name="M:Livet.Notificator.Raise(System.Object,System.String)">
282+ <member name="T:Livet.Behaviors.Messaging.InteractionTransitionAction">
281283 <summary>
282- 識別子と付帯情報をつけて通知します。
284+ 画面遷移(Window)を行うアクションです。TransitionMessageに対応します。
283285 </summary>
284- <param name="eventInformation">付帯情報</param>
285- <param name="token">識別子文字列</param>
286286 </member>
287- <member name="E:Livet.Notificator.Raised">
287+ <member name="P:Livet.Behaviors.Messaging.InteractionTransitionAction.WindowType">
288288 <summary>
289- 通知が発生した時に発生するイベントです。
289+ 遷移するウインドウの型を指定、または取得します。
290290 </summary>
291291 </member>
292- <member name="T:Livet.NotificationRaisedEventArgs">
292+ <member name="P:Livet.Behaviors.Messaging.InteractionTransitionAction.Mode">
293293 <summary>
294- Notificatorが通知を行う際のイベント引数です。
294+ 画面遷移の種類を指定するTransitionMode列挙体を指定、または取得します。<br/>
295+ TransitionMessageでModeがUnKnown以外に指定されていた場合、そちらが優先されます。
295296 </summary>
296297 </member>
297- <member name="M:Livet.NotificationRaisedEventArgs.#ctor(System.String)">
298+ <member name="T:Livet.ViewModelHelper">
298299 <summary>
299- コンストラクタ
300+ ViewModelの作成と実行をサポートするユーティリティクラスです。
300301 </summary>
301- <param name="token">識別子文字列</param>
302302 </member>
303- <member name="M:Livet.NotificationRaisedEventArgs.#ctor(System.Object,System.String)">
303+ <member name="M:Livet.ViewModelHelper.CreateReadOnlyNotifyDispatcherCollection``2(System.Collections.ObjectModel.ObservableCollection{``1},System.Func{``1,``0},System.Windows.Threading.Dispatcher)">
304304 <summary>
305- コンストラクタ
305+ 既存のObservableCollectionと同期された、読み取り専用のDispatcherCollectionを作成します。
306306 </summary>
307- <param name="eventInformation">付帯情報</param>
308- <param name="token">識別子文字列</param>
307+ <typeparam name="TTargetItem">作成するReadOnlyNotifyDispatcherCollectionのコレクションアイテムの型</typeparam>
308+ <typeparam name="TSourceItem">基となるObservableCollectionのコレクションアイテムの型</typeparam>
309+ <param name="source">基となるObservableCollection</param>
310+ <param name="create">TSourceItemからTTargetItemへの変換Func</param>
311+ <param name="dispatcher">作成するコレクションに関連づけられるDispatcher</param>
312+ <returns>ReadOnlyNotifyDispatcherCollection</returns>
309313 </member>
310- <member name="P:Livet.NotificationRaisedEventArgs.Token">
314+ <member name="M:Livet.ViewModelHelper.BindNotifyChanged(System.ComponentModel.INotifyPropertyChanged,Livet.ViewModel,System.ComponentModel.PropertyChangedEventHandler)">
311315 <summary>
312- 識別子文字列
316+ イベントハンドラとINotifyPropertyChanged(Model、あるいは他のViewModel)からのPropertyChangedイベントをWeakEventで紐づけします。
313317 </summary>
318+ <param name="source">Model(INotifyPropertyChanged)</param>
319+ <param name="lifecycleObject">このイベントの購読期間をそのライフサイクルと一致させたいViewModelです。</param>
320+ <param name="handler">PropertyChangedEventHandler</param>
314321 </member>
315- <member name="P:Livet.NotificationRaisedEventArgs.EventInformation">
322+ <member name="M:Livet.ViewModelHelper.BindNotifyCollectionChanged(System.Collections.Specialized.INotifyCollectionChanged,Livet.ViewModel,System.Collections.Specialized.NotifyCollectionChangedEventHandler)">
316323 <summary>
317- 付帯情報
324+ イベントハンドラとINotifyCollectionChanged(ObservableCollection)からのCollectionChangedイベントをWeakEventで紐づけします。
318325 </summary>
326+ <param name="source">INotifyCollectionChangedオブジェクト</param>
327+ <param name="lifecycleObject">このイベントの購読期間をそのライフサイクルと一致させたいViewModelです。</param>
328+ <param name="handler">NotifyCollectionChangedEventHandler</param>
319329 </member>
320- <member name="T:Livet.Behaviors.Messaging.DirectInteractionMessage">
330+ <member name="M:Livet.ViewModelHelper.BindNotification``1(Livet.Notificator{``0},Livet.ViewModel,System.EventHandler{``0})">
321331 <summary>
322- Viewから直接相互作用メッセージを定義する際に使用します。
332+ イベントハンドラとNotificatorからのRaisedイベントをWeakEventで紐づけします。
323333 </summary>
334+ <param name="source">Notificatorオブジェクト</param>
335+ <param name="lifecycleObject">このイベントの購読期間をそのライフサイクルと一致させたいViewModelです。</param>
336+ <param name="handler">EventHandler</param>
337+ <typeparam name="T">イベント引数型</typeparam>
324338 </member>
325- <member name="P:Livet.Behaviors.Messaging.DirectInteractionMessage.Message">
339+ <member name="T:Livet.Behaviors.Messaging.File.InteractionOpenFileDialogAction">
326340 <summary>
327- 相互作用メッセージ(各種InteractionMessage)を指定、または取得します。
341+ 「ファイルを開く」ダイアログを表示するアクションです。SelectOpenFileMessageに対応します。
328342 </summary>
329343 </member>
330- <member name="P:Livet.Behaviors.Messaging.DirectInteractionMessage.CallbackCommand">
344+ <member name="T:Livet.Command.DelegateCommand">
331345 <summary>
332- アクション実行後に実行するコマンドを指定、または取得します<br/>
333- このプロパティが設定されていた場合、アクションの実行後アクションの実行に使用した相互作用メッセージをパラメータとしてコマンドを呼び出します。
346+ 通常ViewModelで使用するコマンドクラスです。
334347 </summary>
335348 </member>
336- <member name="T:Livet.Command.DelegateCommand`1">
337- <summary>
338- 通常ViewModelで使用するコマンドクラスです。
339- </summary>
340- <typeparam name="T">このコマンドを実行する際のパラメータの型</typeparam>
341- </member>
342- <member name="M:Livet.Command.DelegateCommand`1.#ctor(System.Action{`0})">
349+ <member name="M:Livet.Command.DelegateCommand.#ctor(System.Action)">
343350 <summary>
344351 コマンドが実行するアクションを指定して、DelegateCommandの新しいインスタンスを作成します。
345352 </summary>
346353 <param name="execute">コマンドが実行するアクション</param>
347354 </member>
348- <member name="M:Livet.Command.DelegateCommand`1.#ctor(System.Action{`0},System.Func{`0,System.Boolean})">
355+ <member name="M:Livet.Command.DelegateCommand.#ctor(System.Action,System.Func{System.Boolean})">
349356 <summary>
350357 コマンドが実行するアクションを指定して、DelegateCommandの新しいインスタンスを作成します。
351358 </summary>
352359 <param name="execute">コマンドが実行するアクション</param>
353360 <param name="canExecute">コマンドが実行可能かどうかを返すFunc</param>
354361 </member>
355- <member name="M:Livet.Command.DelegateCommand`1.CanExecute(`0)">
362+ <member name="M:Livet.Command.DelegateCommand.CanExecute">
356363 <summary>
357364 コマンドが実行可能かを返します。
358365 </summary>
359- <param name="parameter">コマンドの実行に使用するパラメータ</param>
360366 <returns>コマンドの実行可非</returns>
361367 </member>
362- <member name="M:Livet.Command.DelegateCommand`1.System#Windows#Input#ICommand#CanExecute(System.Object)">
368+ <member name="M:Livet.Command.DelegateCommand.System#Windows#Input#ICommand#CanExecute(System.Object)">
363369 <summary>
364- コマンドが実行可能かを返します。
370+ 型引数を持たないDelegateCommandでは実行しないでください。
365371 </summary>
366- <param name="parameter">コマンドの実行に使用するパラメータ</param>
367- <returns>コマンドの実行可非</returns>
372+ <param name="parameter"></param>
373+ <returns></returns>
368374 </member>
369- <member name="M:Livet.Command.DelegateCommand`1.Execute(`0)">
375+ <member name="M:Livet.Command.DelegateCommand.Execute">
370376 <summary>
371377 このコマンドを実行します。
372378 </summary>
373- <param name="parameter">コマンドの実行に使用するパラメータ</param>
374379 </member>
375- <member name="M:Livet.Command.DelegateCommand`1.System#Windows#Input#ICommand#Execute(System.Object)">
380+ <member name="M:Livet.Command.DelegateCommand.System#Windows#Input#ICommand#Execute(System.Object)">
376381 <summary>
377- このコマンドを実行します。
382+ 型引数を持たないDelegateCommandでは実行しないでください。
378383 </summary>
379- <param name="parameter">コマンドの実行に使用するパラメータ</param>
384+ <param name="parameter"></param>
380385 </member>
381- <member name="M:Livet.Command.DelegateCommand`1.RaiseCanExecuteChanged">
386+ <member name="M:Livet.Command.DelegateCommand.RaiseCanExecuteChanged">
382387 <summary>
383388 コマンドの実行可非状態が変化した事をCommandManagerに通知します。
384389 </summary>
385390 </member>
386- <member name="M:Livet.Command.DelegateCommand`1.RaisePropertyChanged(System.String)">
391+ <member name="M:Livet.Command.DelegateCommand.RaisePropertyChanged(System.String)">
387392 <summary>
388393 プロパティ変更通知イベントを発生させます
389394 </summary>
390395 <param name="propertyName">プロパティ名</param>
391396 </member>
392- <member name="E:Livet.Command.DelegateCommand`1.CanExecuteChanged">
397+ <member name="E:Livet.Command.DelegateCommand.CanExecuteChanged">
393398 <summary>
394399 コマンドの実行可非状態が変化した場合に発行されるイベントです。
395400 </summary>
396401 </member>
397- <member name="E:Livet.Command.DelegateCommand`1.PropertyChanged">
402+ <member name="E:Livet.Command.DelegateCommand.PropertyChanged">
398403 <summary>
399404 プロパティ変更通知イベントです。
400405 </summary>
401406 </member>
402- <member name="T:Livet.Messaging.Window.WindowAction">
407+ <member name="T:Livet.DispatcherCollection`1">
403408 <summary>
404- WindowActionMessageで使用する、Windowが遷移すべき状態を表します。
409+ コレクション変更通知を指定されたDisptcher経由で行うコレクションです。
405410 </summary>
411+ <typeparam name="T">コレクションアイテムの型</typeparam>
406412 </member>
407- <member name="F:Livet.Messaging.Window.WindowAction.Close">
413+ <member name="P:Livet.DispatcherCollection`1.Dispatcher">
408414 <summary>
409- Windowを閉じます。
415+ このコレクションに関連付けられたDispatcherを取得します。
410416 </summary>
411417 </member>
412- <member name="F:Livet.Messaging.Window.WindowAction.Maximize">
418+ <member name="P:Livet.DispatcherCollection`1.CollectionChangedDispatcherPriority">
413419 <summary>
414- Windowを最大化します。
420+ コレクション変更通知時のDispatcherPriorityを指定、または取得します。
415421 </summary>
416422 </member>
417- <member name="F:Livet.Messaging.Window.WindowAction.Minimize">
423+ <member name="T:Livet.Messaging.File.SelectFileMessage">
418424 <summary>
419- Windowを最小化します。
425+ ファイルを開く・ファイルを保存するアクション用の共通相互作用メッセージ基底抽象クラスです。<br/>
426+ ファイルを開くアクションをViewに行わせたい場合は、SelectOpenFileMessageを使用してください。<br/>
427+ ファイルを保存するアクションをViewに行わせたい場合は、SelectSaveFileMessageを使用してください。
420428 </summary>
421429 </member>
422- <member name="F:Livet.Messaging.Window.WindowAction.Normal">
430+ <member name="M:Livet.Messaging.File.SelectFileMessage.CreateInstanceCore">
423431 <summary>
424- Windowを通常状態にします。
432+ 派生クラスでは必ずオーバーライドしてください。Freezableオブジェクトとして必要な実装です。<br/>
433+ 通常このメソッドは、自身の新しいインスタンスを返すように実装します。
425434 </summary>
435+ <returns>自身の新しいインスタンス</returns>
426436 </member>
427- <member name="F:Livet.Messaging.Window.WindowAction.Active">
437+ <member name="P:Livet.Messaging.File.SelectFileMessage.Title">
428438 <summary>
429- Windowをアクティブにします。
439+ ダイアログタイトルを指定、または取得します。
430440 </summary>
431441 </member>
432- <member name="T:Livet.Behaviors.Messaging.InteractionInformationDialogAction">
442+ <member name="P:Livet.Messaging.File.SelectFileMessage.Filter">
433443 <summary>
434- 情報ダイアログを表示するアクションです。InformationMessageに対応します。
444+ ファイルの拡張子Filterを指定、または取得します。
435445 </summary>
436446 </member>
437- <member name="T:Livet.ReadOnlyNotifyDispatcherCollection`1">
447+ <member name="P:Livet.Messaging.File.SelectFileMessage.AddExtension">
438448 <summary>
439- DispatcherCollectionの読み取り専用ラッパーです。<br/>
440- ReadOnlyObservableCollectionなどと異なり、ソースコレクションの変更によってコレクションが変更された場合、<br/>
441- 変更通知を行います。
449+ 拡張子を指定しなかった場合、自動で拡張子を追加するかどうかを指定、または取得します。デフォルトはtrueです。
442450 </summary>
443- <typeparam name="T">コレクションアイテムの型</typeparam>
444451 </member>
445- <member name="T:Livet.IWeakEventListenerHaving">
452+ <member name="T:Livet.Command.DelegateCommand`1">
446453 <summary>
447- IWeakEventListenerのリストを持つクラスです。
448- 通常このリストにIWeakEventListenerを追加することで、<br/>
449- IWeakEventListenerとこのインターフェースを実装したオブジェクトのライフサイクルを一致させます。
454+ 通常ViewModelで使用するコマンドクラスです。
450455 </summary>
456+ <typeparam name="T">このコマンドを実行する際のパラメータの型</typeparam>
451457 </member>
452- <member name="P:Livet.ReadOnlyNotifyDispatcherCollection`1.Dispatcher">
458+ <member name="M:Livet.Command.DelegateCommand`1.#ctor(System.Action{`0})">
453459 <summary>
454- このコレクションが変更通知を行うDispatcherを取得します。
460+ コマンドが実行するアクションを指定して、DelegateCommandの新しいインスタンスを作成します。
455461 </summary>
462+ <param name="execute">コマンドが実行するアクション</param>
456463 </member>
457- <member name="P:Livet.ReadOnlyNotifyDispatcherCollection`1.Livet#IWeakEventListenerHaving#ListenerList">
464+ <member name="M:Livet.Command.DelegateCommand`1.#ctor(System.Action{`0},System.Func{`0,System.Boolean})">
458465 <summary>
459- このクラスが購読するWeakEventのListenerの参照を確保するためのリストです。
460- このクラスインスタンスの生存期間の間、保持しておきたいIWeakEventLisntenerはこのリストに入れてください。
466+ コマンドが実行するアクションを指定して、DelegateCommandの新しいインスタンスを作成します。
461467 </summary>
468+ <param name="execute">コマンドが実行するアクション</param>
469+ <param name="canExecute">コマンドが実行可能かどうかを返すFunc</param>
462470 </member>
463- <member name="T:Livet.DispatcherCollection`1">
471+ <member name="M:Livet.Command.DelegateCommand`1.CanExecute(`0)">
464472 <summary>
465- コレクション変更通知を指定されたDisptcher経由で行うコレクションです。
473+ コマンドが実行可能かを返します。
466474 </summary>
467- <typeparam name="T">コレクションアイテムの型</typeparam>
475+ <param name="parameter">コマンドの実行に使用するパラメータ</param>
476+ <returns>コマンドの実行可非</returns>
468477 </member>
469- <member name="P:Livet.DispatcherCollection`1.Dispatcher">
478+ <member name="M:Livet.Command.DelegateCommand`1.System#Windows#Input#ICommand#CanExecute(System.Object)">
470479 <summary>
471- このコレクションに関連付けられたDispatcherを取得します。
480+ コマンドが実行可能かを返します。
472481 </summary>
482+ <param name="parameter">コマンドの実行に使用するパラメータ</param>
483+ <returns>コマンドの実行可非</returns>
473484 </member>
474- <member name="P:Livet.DispatcherCollection`1.CollectionChangedDispatcherPriority">
485+ <member name="M:Livet.Command.DelegateCommand`1.Execute(`0)">
475486 <summary>
476- コレクション変更通知時のDispatcherPriorityを指定、または取得します。
487+ このコマンドを実行します。
477488 </summary>
489+ <param name="parameter">コマンドの実行に使用するパラメータ</param>
478490 </member>
479- <member name="T:Livet.DispatcherHelper">
491+ <member name="M:Livet.Command.DelegateCommand`1.System#Windows#Input#ICommand#Execute(System.Object)">
480492 <summary>
481- UIDispatcherへのアクセスを簡易化します。
493+ このコマンドを実行します。
482494 </summary>
495+ <param name="parameter">コマンドの実行に使用するパラメータ</param>
483496 </member>
484- <member name="M:Livet.DispatcherHelper.BeginInvoke(System.Action)">
497+ <member name="M:Livet.Command.DelegateCommand`1.RaiseCanExecuteChanged">
485498 <summary>
486- UIDispatcherで指定されたアクションを実行します。
499+ コマンドの実行可非状態が変化した事をCommandManagerに通知します。
487500 </summary>
488- <param name="action">アクション</param>
489501 </member>
490- <member name="M:Livet.DispatcherHelper.BeginInvoke(System.Action,System.Windows.Threading.DispatcherPriority)">
502+ <member name="M:Livet.Command.DelegateCommand`1.RaisePropertyChanged(System.String)">
491503 <summary>
492- UIDispatcherで指定されたアクションを実行します。
504+ プロパティ変更通知イベントを発生させます
493505 </summary>
494- <param name="action">アクション</param>
495- <param name="priority">DispatcherPriority</param>
506+ <param name="propertyName">プロパティ名</param>
496507 </member>
497- <member name="P:Livet.DispatcherHelper.UIDispatcher">
508+ <member name="E:Livet.Command.DelegateCommand`1.CanExecuteChanged">
498509 <summary>
499- UIDispatcherを指定、または取得します。通常このプロパティはApp_StartUpで指定されます。
510+ コマンドの実行可非状態が変化した場合に発行されるイベントです。
500511 </summary>
501512 </member>
502- <member name="T:Livet.Behaviors.Messaging.File.InteractionSaveFileDialogAction">
513+ <member name="E:Livet.Command.DelegateCommand`1.PropertyChanged">
503514 <summary>
504- 「ファイルを保存する」ダイアログを表示するアクションです。SelectSaveFileMessageに対応します。
515+ プロパティ変更通知イベントです。
505516 </summary>
506517 </member>
507- <member name="T:Livet.NotifyObject">
518+ <member name="F:Livet.Messaging.TransitionMode.Normal">
508519 <summary>
509- 変更通知オブジェクトの基底クラスです。
520+ 新しくWindowを開きます。
510521 </summary>
511522 </member>
512- <member name="M:Livet.NotifyObject.RaisePropertyChanged(System.Linq.Expressions.Expression{System.Func{System.Object}})">
523+ <member name="F:Livet.Messaging.TransitionMode.Modal">
513524 <summary>
514- プロパティ変更通知イベントを発生させます。
525+ 新しいWindowをモーダルダイアログとして開きます。
515526 </summary>
516- <param name="propertyExpression">() => プロパティ形式のラムダ式</param>
517527 </member>
518- <member name="M:Livet.NotifyObject.RaisePropertyChanged(System.String)">
528+ <member name="F:Livet.Messaging.TransitionMode.NewOrActive">
519529 <summary>
520- プロパティ変更通知イベントを発生させます
530+ すでに同じ型のWindowが開かれている場合はそのWindowをアクティブにします。<br/>
531+ 同じ型のWindowが開かれていなかった場合、新しくWindowを開きます。
521532 </summary>
522- <param name="propertyName">プロパティ名</param>
523533 </member>
524- <member name="E:Livet.NotifyObject.PropertyChanged">
534+ <member name="F:Livet.Messaging.TransitionMode.UnKnown">
525535 <summary>
526- プロパティ変更通知イベントです。
536+ 指定されていません。Windowは表示されません。
527537 </summary>
528538 </member>
529- <member name="T:Livet.Messaging.ConfirmMessage">
539+ <member name="T:Livet.Messaging.TransitionMessage">
530540 <summary>
531- 確認相互作用メッセージを表します。
541+ 画面遷移アクション用の相互作用メッセージです。
532542 </summary>
533543 </member>
534- <member name="M:Livet.Messaging.ConfirmMessage.#ctor(System.String,System.String,System.String)">
544+ <member name="M:Livet.Messaging.TransitionMessage.#ctor(System.String)">
535545 <summary>
536- 表示するメッセージ・キャプション・メッセージキーを指定して、新しい相互作用メッセージのインスタンスを生成します。
546+ メッセージキーを指定して新しい相互作用メッセージのインスタンスを生成します。
537547 </summary>
538- <param name="text">表示するメッセージ</param>
539- <param name="caption">キャプション</param>
540548 <param name="messageKey">メッセージキー</param>
541549 </member>
542- <member name="M:Livet.Messaging.ConfirmMessage.#ctor(System.String,System.String,System.Windows.MessageBoxImage,System.String)">
550+ <member name="M:Livet.Messaging.TransitionMessage.#ctor(Livet.ViewModel,System.String)">
543551 <summary>
544- 表示するメッセージ・キャプション・メッセージボックスイメージ・メッセージキーを指定して、新しい相互作用メッセージのインスタンスを生成します。
552+ 新しいWindowのDataContextに設定するViewModelとメッセージキーを指定して新しい相互作用メッセージのインスタンスを生成します。
545553 </summary>
546- <param name="text">表示するメッセージ</param>
547- <param name="caption">キャプション</param>
548- <param name="image">メッセージボックスイメージ</param>
554+ <param name="transitionViewModel">新しいWindowのDataContextに設定するViewModel</param>
549555 <param name="messageKey">メッセージキー</param>
550556 </member>
551- <member name="M:Livet.Messaging.ConfirmMessage.#ctor(System.String,System.String,System.Windows.MessageBoxImage,System.Windows.MessageBoxButton,System.String)">
557+ <member name="M:Livet.Messaging.TransitionMessage.#ctor(Livet.ViewModel,Livet.Messaging.TransitionMode,System.String)">
552558 <summary>
553- 表示するメッセージ・キャプション・メッセージボックスイメージ・メッセージボックスボタン・メッセージキーを指定して、新しい相互作用メッセージのインスタンスを生成します。
559+ 新しいWindowのDataContextに設定するViewModelとメッセージキーを指定して新しい相互作用メッセージのインスタンスを生成します。
554560 </summary>
555- <param name="text">表示するメッセージ</param>
556- <param name="caption">キャプション</param>
557- <param name="image">メッセージボックスイメージ</param>
558- <param name="button">メッセージボックスボタン</param>
561+ <param name="transitionViewModel">新しいWindowのDataContextに設定するViewModel</param>
562+ <param name="mode">画面遷移の方法を決定するTransitionMode列挙体。初期値はUnKnownです。</param>
559563 <param name="messageKey">メッセージキー</param>
560564 </member>
561- <member name="M:Livet.Messaging.ConfirmMessage.CreateInstanceCore">
565+ <member name="M:Livet.Messaging.TransitionMessage.CreateInstanceCore">
562566 <summary>
563567 派生クラスでは必ずオーバーライドしてください。Freezableオブジェクトとして必要な実装です。<br/>
564568 通常このメソッドは、自身の新しいインスタンスを返すように実装します。
565569 </summary>
566570 <returns>自身の新しいインスタンス</returns>
567571 </member>
568- <member name="P:Livet.Messaging.ConfirmMessage.Text">
569- <summary>
570- 表示するメッセージを指定、または取得します。
571- </summary>
572- </member>
573- <member name="P:Livet.Messaging.ConfirmMessage.Caption">
572+ <member name="P:Livet.Messaging.TransitionMessage.TransitionViewModel">
574573 <summary>
575- キャプションを指定、または取得します。
574+ 新しいWindowのDataContextに設定するViewModelを指定、または取得します。
576575 </summary>
577576 </member>
578- <member name="P:Livet.Messaging.ConfirmMessage.Image">
577+ <member name="P:Livet.Messaging.TransitionMessage.Mode">
579578 <summary>
580- メッセージボックスイメージを指定、または取得します。
579+ 新しいWindowの表示方法を決定するTransitionModeを指定、または取得します。<br/>
580+ 初期値はUnKnownです。
581581 </summary>
582582 </member>
583- <member name="P:Livet.Messaging.ConfirmMessage.Button">
583+ <member name="T:Livet.Messaging.Window.WindowAction">
584584 <summary>
585- メッセージボックスボタンを指定、または取得します。
585+ WindowActionMessageで使用する、Windowが遷移すべき状態を表します。
586586 </summary>
587587 </member>
588- <member name="T:Livet.Behaviors.Messaging.InteractionConfirmDialogAction">
588+ <member name="F:Livet.Messaging.Window.WindowAction.Close">
589589 <summary>
590- 確認ダイアログを表示するアクションです。ConfirmMessageに対応します。
590+ Windowを閉じます。
591591 </summary>
592592 </member>
593- <member name="T:Livet.Messaging.InformationMessage">
593+ <member name="F:Livet.Messaging.Window.WindowAction.Maximize">
594594 <summary>
595- 情報をViewに通知するためのメッセージです。
595+ Windowを最大化します。
596596 </summary>
597597 </member>
598- <member name="M:Livet.Messaging.InformationMessage.#ctor(System.String,System.String,System.String)">
598+ <member name="F:Livet.Messaging.Window.WindowAction.Minimize">
599599 <summary>
600- 表示するメッセージ・キャプション・メッセージキーを指定して、新しい相互作用メッセージのインスタンスを生成します。
600+ Windowを最小化します。
601601 </summary>
602- <param name="text">表示するメッセージ</param>
603- <param name="caption">キャプション</param>
604- <param name="messageKey">メッセージキー</param>
605602 </member>
606- <member name="M:Livet.Messaging.InformationMessage.#ctor(System.String,System.String,System.Windows.MessageBoxImage,System.String)">
603+ <member name="F:Livet.Messaging.Window.WindowAction.Normal">
607604 <summary>
608- 表示するメッセージ・キャプション・メッセージボックスイメージ・メッセージキーを指定して、新しい相互作用メッセージのインスタンスを生成します。
605+ Windowを通常状態にします。
609606 </summary>
610- <param name="text">表示するメッセージ</param>
611- <param name="caption">キャプション</param>
612- <param name="image">メッセージボックスイメージ</param>
613- <param name="messageKey">メッセージキー</param>
614607 </member>
615- <member name="M:Livet.Messaging.InformationMessage.CreateInstanceCore">
608+ <member name="F:Livet.Messaging.Window.WindowAction.Active">
616609 <summary>
617- 派生クラスでは必ずオーバーライドしてください。Freezableオブジェクトとして必要な実装です。<br/>
618- 通常このメソッドは、自身の新しいインスタンスを返すように実装します。
610+ Windowをアクティブにします。
619611 </summary>
620- <returns>自身の新しいインスタンス</returns>
621612 </member>
622- <member name="P:Livet.Messaging.InformationMessage.Text">
613+ <member name="T:Livet.Behaviors.Messaging.File.InteractionSaveFileDialogAction">
623614 <summary>
624- 表示するメッセージを指定、または取得します。
615+ 「ファイルを保存する」ダイアログを表示するアクションです。SelectSaveFileMessageに対応します。
625616 </summary>
626617 </member>
627- <member name="P:Livet.Messaging.InformationMessage.Caption">
618+ <member name="T:Livet.Messaging.File.SelectOpenFileMessage">
628619 <summary>
629- キャプションを指定、または取得します。
620+ ファイルを開く アクション用の相互作用メッセージです。
630621 </summary>
631622 </member>
632- <member name="P:Livet.Messaging.InformationMessage.Image">
623+ <member name="M:Livet.Messaging.File.SelectOpenFileMessage.#ctor(System.String)">
633624 <summary>
634- メッセージボックスイメージを指定、または取得します。
625+ メッセージキーを指定して新しい相互作用メッセージのインスタンスを生成します。
635626 </summary>
627+ <param name="messageKey">メッセージキー</param>
636628 </member>
637- <member name="T:Livet.Behaviors.Messaging.InteractionMessageTrigger">
629+ <member name="M:Livet.Messaging.File.SelectOpenFileMessage.CreateInstanceCore">
638630 <summary>
639- ViewModelからの相互作用メッセージを受信し、アクションを実行します。
631+ 派生クラスでは必ずオーバーライドしてください。Freezableオブジェクトとして必要な実装です。<br/>
632+ 通常このメソッドは、自身の新しいインスタンスを返すように実装します。
640633 </summary>
634+ <returns>自身の新しいインスタンス</returns>
641635 </member>
642- <member name="P:Livet.Behaviors.Messaging.InteractionMessageTrigger.Messenger">
636+ <member name="P:Livet.Messaging.File.SelectOpenFileMessage.MultiSelect">
643637 <summary>
644- ViewModelのMessengerを指定、または取得します。
638+ 複数ファイルを選択可能かを取得、または設定します。
645639 </summary>
646640 </member>
647- <member name="P:Livet.Behaviors.Messaging.InteractionMessageTrigger.MessageKey">
641+ <member name="T:Livet.Messaging.InteractionMessenger">
648642 <summary>
649- このトリガーが反応する相互作用メッセージのメッセージキーを指定、または取得します。<br/>
650- このプロパティが指定されていない場合、このトリガーは全ての相互作用メッセージに反応します。
643+ ViewModelで使用するMessengerクラスです。
651644 </summary>
652645 </member>
653- <member name="T:Livet.ViewModel">
646+ <member name="M:Livet.Messaging.InteractionMessenger.Raise(Livet.Messaging.InteractionMessage)">
654647 <summary>
655- ViewModelの基底クラスです。
648+ 指定された相互作用メッセージを同期的に送信します。
656649 </summary>
650+ <param name="message">相互作用メッセージ</param>
657651 </member>
658- <member name="P:Livet.ViewModel.Messenger">
652+ <member name="M:Livet.Messaging.InteractionMessenger.RaiseAsync(Livet.Messaging.InteractionMessage)">
659653 <summary>
660- このViewModelクラスの基本Messegerインスタンスです。
654+ 指定された相互作用メッセージを非同期で送信します。
661655 </summary>
656+ <param name="message">相互作用メッセージ</param>
662657 </member>
663- <member name="P:Livet.ViewModel.Livet#IWeakEventListenerHaving#ListenerList">
658+ <member name="M:Livet.Messaging.InteractionMessenger.GetResponse``1(``0)">
664659 <summary>
665- このクラスが購読するWeakEventのListenerの参照を確保するためのリストです。
666- このクラスインスタンスの生存期間の間、保持しておきたいIWeakEventLisntenerはこのリストに入れてください。
660+ 指定された、戻り値情報のある相互作用メッセージを同期的に送信します。
667661 </summary>
662+ <typeparam name="T">戻り値情報のある相互作用メッセージの型</typeparam>
663+ <param name="message">戻り値情報のある相互作用メッセージ</param>
664+ <returns>アクション実行後に、戻り情報を含んだ相互作用メッセージ</returns>
668665 </member>
669- <member name="T:Livet.Messaging.TransitionMessage">
666+ <member name="M:Livet.Messaging.InteractionMessenger.GetResponseAsync``1(``0,System.Action{``0})">
670667 <summary>
671- 画面遷移アクション用の相互作用メッセージです。
668+ 指定された、戻り値情報のある相互作用メッセージを非同期で送信します。
672669 </summary>
670+ <typeparam name="T">戻り値情報のある相互作用メッセージの型</typeparam>
671+ <param name="message">戻り値情報のある相互作用メッセージ</param>
672+ <param name="callback">コールバック</param>
673673 </member>
674- <member name="M:Livet.Messaging.TransitionMessage.#ctor(System.String)">
674+ <member name="E:Livet.Messaging.InteractionMessenger.Raised">
675675 <summary>
676- メッセージキーを指定して新しい相互作用メッセージのインスタンスを生成します。
676+ 相互作用メッセージが送信された時に発生するイベントです。
677677 </summary>
678- <param name="messageKey">メッセージキー</param>
679678 </member>
680- <member name="M:Livet.Messaging.TransitionMessage.#ctor(Livet.ViewModel,System.String)">
679+ <member name="T:Livet.Messaging.InteractionMessageRaisedEventArgs">
681680 <summary>
682- 新しいWindowのDataContextに設定するViewModelとメッセージキーを指定して新しい相互作用メッセージのインスタンスを生成します。
681+ 相互作用メッセージ送信時イベント用のイベント引数です。
683682 </summary>
684- <param name="transitionViewModel">新しいWindowのDataContextに設定するViewModel</param>
685- <param name="messageKey">メッセージキー</param>
686683 </member>
687- <member name="M:Livet.Messaging.TransitionMessage.#ctor(Livet.ViewModel,Livet.Messaging.TransitionMode,System.String)">
684+ <member name="M:Livet.Messaging.InteractionMessageRaisedEventArgs.#ctor(Livet.Messaging.InteractionMessage)">
688685 <summary>
689- 新しいWindowのDataContextに設定するViewModelとメッセージキーを指定して新しい相互作用メッセージのインスタンスを生成します。
686+ コンストラクタ
690687 </summary>
691- <param name="transitionViewModel">新しいWindowのDataContextに設定するViewModel</param>
692- <param name="mode">画面遷移の方法を決定するTransitionMode列挙体。初期値はUnKnownです。</param>
693- <param name="messageKey">メッセージキー</param>
688+ <param name="message">InteractionMessage</param>
694689 </member>
695- <member name="M:Livet.Messaging.TransitionMessage.CreateInstanceCore">
690+ <member name="P:Livet.Messaging.InteractionMessageRaisedEventArgs.Message">
696691 <summary>
697- 派生クラスでは必ずオーバーライドしてください。Freezableオブジェクトとして必要な実装です。<br/>
698- 通常このメソッドは、自身の新しいインスタンスを返すように実装します。
692+ 送信されたメッセージ
699693 </summary>
700- <returns>自身の新しいインスタンス</returns>
701694 </member>
702- <member name="P:Livet.Messaging.TransitionMessage.TransitionViewModel">
695+ <member name="T:Livet.Messaging.Window.WindowActionMessage">
703696 <summary>
704- 新しいWindowのDataContextに設定するViewModelを指定、または取得します。
697+ Windowを最大化・最小化・閉じる・通常化させるための相互作用メッセージです。
705698 </summary>
706699 </member>
707- <member name="P:Livet.Messaging.TransitionMessage.Mode">
700+ <member name="M:Livet.Messaging.Window.WindowActionMessage.#ctor(System.String)">
708701 <summary>
709- 新しいWindowの表示方法を決定するTransitionModeを指定、または取得します。<br/>
710- 初期値はUnKnownです。
702+ メッセージキーを指定して新しい相互作用メッセージのインスタンスを生成します。
711703 </summary>
704+ <param name="messageKey">メッセージキー</param>
712705 </member>
713- <member name="T:Livet.Command.DelegateCommand">
706+ <member name="M:Livet.Messaging.Window.WindowActionMessage.#ctor(System.String,Livet.Messaging.Window.WindowAction)">
714707 <summary>
715- 通常ViewModelで使用するコマンドクラスです。
708+ メッセージキーとWindowが遷移すべき状態を定義して、新しい相互作用メッセージのインスタンスを生成します。
716709 </summary>
710+ <param name="messageKey">メッセージキー</param>
711+ <param name="action">Windowが遷移すべき状態を表すWindowAction列挙体</param>
717712 </member>
718- <member name="M:Livet.Command.DelegateCommand.#ctor(System.Action)">
713+ <member name="M:Livet.Messaging.Window.WindowActionMessage.CreateInstanceCore">
719714 <summary>
720- コマンドが実行するアクションを指定して、DelegateCommandの新しいインスタンスを作成します。
715+ 派生クラスでは必ずオーバーライドしてください。Freezableオブジェクトとして必要な実装です。<br/>
716+ 通常このメソッドは、自身の新しいインスタンスを返すように実装します。
721717 </summary>
722- <param name="execute">コマンドが実行するアクション</param>
718+ <returns>自身の新しいインスタンス</returns>
723719 </member>
724- <member name="M:Livet.Command.DelegateCommand.#ctor(System.Action,System.Func{System.Boolean})">
720+ <member name="P:Livet.Messaging.Window.WindowActionMessage.Action">
725721 <summary>
726- コマンドが実行するアクションを指定して、DelegateCommandの新しいインスタンスを作成します。
722+ Windowが遷移すべき状態を表すWindowAction列挙体を指定、または取得します。
727723 </summary>
728- <param name="execute">コマンドが実行するアクション</param>
729- <param name="canExecute">コマンドが実行可能かどうかを返すFunc</param>
730724 </member>
731- <member name="M:Livet.Command.DelegateCommand.CanExecute">
725+ <member name="T:Livet.NotificatorHelper">
732726 <summary>
733- コマンドが実行可能かを返します。
727+ Notificatorをサポートします。
734728 </summary>
735- <returns>コマンドの実行可非</returns>
736729 </member>
737- <member name="M:Livet.Command.DelegateCommand.System#Windows#Input#ICommand#CanExecute(System.Object)">
730+ <member name="M:Livet.NotificatorHelper.BindNotification``1(Livet.Notificator{``0},Livet.IWeakEventListenerHaving,System.EventHandler{``0})">
738731 <summary>
739- 型引数を持たないDelegateCommandでは実行しないでください。
732+ イベントハンドラとNotificatorからのRaisedイベントをWeakEventで紐づけします。ViewModelで利用する場合はViewModelHelperのメソッドを利用してください。
740733 </summary>
741- <param name="parameter"></param>
742- <returns></returns>
734+ <param name="source">Notificatorオブジェクト</param>
735+ <param name="lifecycleObject">このイベントの購読期間をそのライフサイクルと一致させたいIWeakEventListenerHavingオブジェクトです。</param>
736+ <param name="handler">EventHandler</param>
737+ <typeparam name="T">イベント引数型</typeparam>
743738 </member>
744- <member name="M:Livet.Command.DelegateCommand.Execute">
739+ <member name="T:Livet.Behaviors.Messaging.InteractionMessageTrigger">
745740 <summary>
746- このコマンドを実行します。
741+ ViewModelからの相互作用メッセージを受信し、アクションを実行します。
747742 </summary>
748743 </member>
749- <member name="M:Livet.Command.DelegateCommand.System#Windows#Input#ICommand#Execute(System.Object)">
744+ <member name="P:Livet.Behaviors.Messaging.InteractionMessageTrigger.Messenger">
750745 <summary>
751- 型引数を持たないDelegateCommandでは実行しないでください。
746+ ViewModelのMessengerを指定、または取得します。
752747 </summary>
753- <param name="parameter"></param>
754748 </member>
755- <member name="M:Livet.Command.DelegateCommand.RaiseCanExecuteChanged">
749+ <member name="P:Livet.Behaviors.Messaging.InteractionMessageTrigger.MessageKey">
756750 <summary>
757- コマンドの実行可非状態が変化した事をCommandManagerに通知します。
751+ このトリガーが反応する相互作用メッセージのメッセージキーを指定、または取得します。<br/>
752+ このプロパティが指定されていない場合、このトリガーは全ての相互作用メッセージに反応します。
758753 </summary>
759754 </member>
760- <member name="M:Livet.Command.DelegateCommand.RaisePropertyChanged(System.String)">
755+ <member name="T:Livet.Behaviors.Messaging.InteractionConfirmDialogAction">
761756 <summary>
762- プロパティ変更通知イベントを発生させます
757+ 確認ダイアログを表示するアクションです。ConfirmMessageに対応します。
763758 </summary>
764- <param name="propertyName">プロパティ名</param>
765759 </member>
766- <member name="E:Livet.Command.DelegateCommand.CanExecuteChanged">
760+ <member name="T:Livet.DispatcherHelper">
767761 <summary>
768- コマンドの実行可非状態が変化した場合に発行されるイベントです。
762+ UIDispatcherへのアクセスを簡易化します。
769763 </summary>
770764 </member>
771- <member name="E:Livet.Command.DelegateCommand.PropertyChanged">
765+ <member name="M:Livet.DispatcherHelper.BeginInvoke(System.Action)">
772766 <summary>
773- プロパティ変更通知イベントです。
767+ UIDispatcherで指定されたアクションを実行します。
774768 </summary>
769+ <param name="action">アクション</param>
775770 </member>
776- <member name="T:Livet.Messaging.InteractionMessenger">
771+ <member name="M:Livet.DispatcherHelper.BeginInvoke(System.Action,System.Windows.Threading.DispatcherPriority)">
777772 <summary>
778- ViewModelで使用するMessengerクラスです。
773+ UIDispatcherで指定されたアクションを実行します。
779774 </summary>
775+ <param name="action">アクション</param>
776+ <param name="priority">DispatcherPriority</param>
780777 </member>
781- <member name="M:Livet.Messaging.InteractionMessenger.Raise(Livet.Messaging.InteractionMessage)">
778+ <member name="P:Livet.DispatcherHelper.UIDispatcher">
782779 <summary>
783- 指定された相互作用メッセージを送信します。
780+ UIDispatcherを指定、または取得します。通常このプロパティはApp_StartUpで指定されます。
784781 </summary>
785- <param name="message">相互作用メッセージ</param>
786782 </member>
787- <member name="M:Livet.Messaging.InteractionMessenger.GetResponse``1(``0)">
783+ <member name="T:Livet.Messaging.File.SelectSaveFileMessage">
788784 <summary>
789- 指定された、戻り値情報のある相互作用メッセージを送信します。
785+ ファイルを保存する 用の相互作用メッセージです。
790786 </summary>
791- <typeparam name="T">戻り値情報のある相互作用メッセージの型</typeparam>
792- <param name="message">戻り値情報のある相互作用メッセージ</param>
793- <returns>アクション実行後に、戻り情報を含んだ相互作用メッセージ</returns>
794787 </member>
795- <member name="E:Livet.Messaging.InteractionMessenger.Raised">
788+ <member name="M:Livet.Messaging.File.SelectSaveFileMessage.#ctor(System.String)">
796789 <summary>
797- 相互作用メッセージが送信された時に発生するイベントです。
790+ メッセージキーを指定して新しい相互作用メッセージのインスタンスを生成します。
798791 </summary>
792+ <param name="messageKey">メッセージキー</param>
799793 </member>
800- <member name="T:Livet.Messaging.InteractionMessageRaisedEventArgs">
794+ <member name="M:Livet.Messaging.File.SelectSaveFileMessage.CreateInstanceCore">
801795 <summary>
802- 相互作用メッセージ送信時イベント用のイベント引数です。
796+ 派生クラスでは必ずオーバーライドしてください。Freezableオブジェクトとして必要な実装です。<br/>
797+ 通常このメソッドは、自身の新しいインスタンスを返すように実装します。
803798 </summary>
799+ <returns>自身の新しいインスタンス</returns>
804800 </member>
805- <member name="M:Livet.Messaging.InteractionMessageRaisedEventArgs.#ctor(Livet.Messaging.InteractionMessage)">
801+ <member name="P:Livet.Messaging.File.SelectSaveFileMessage.CreatePrompt">
806802 <summary>
807- コンストラクタ
803+ ユーザーが存在しないファイルを指定した場合に、ファイルを作成することを確認するメッセージを表示するかどうかを指定、または取得します。デフォルトはfalseです。
808804 </summary>
809- <param name="message">InteractionMessage</param>
810805 </member>
811- <member name="P:Livet.Messaging.InteractionMessageRaisedEventArgs.Message">
806+ <member name="P:Livet.Messaging.File.SelectSaveFileMessage.OverwritePrompt">
812807 <summary>
813- 送信されたメッセージ
808+ ユーザーが指定したファイルが存在する場合、上書き確認メッセージを表示するかどうかを指定、または取得します。デフォルトはtrueです。
814809 </summary>
815810 </member>
816811 </members>
Binary files a/HatenaDiaryClient/InfrastructureAssemblies/Livet.dll and b/HatenaDiaryClient/InfrastructureAssemblies/Livet.dll differ
Binary files /dev/null and b/HatenaDiaryClient/InfrastructureAssemblies/Okazuki.BehaviorSupport.dll differ
--- /dev/null
+++ b/HatenaDiaryClient/Models/BlogItem.cs
@@ -0,0 +1,72 @@
1+using Azyobuzi.HatenaDiaryClient.Models.Hatena;
2+using Livet;
3+
4+namespace Azyobuzi.HatenaDiaryClient.Models
5+{
6+ /// <summary>
7+ /// BlogEntryのラッパー
8+ /// </summary>
9+ class BlogItem : NotifyObject
10+ {
11+ BlogEntry _Entry;
12+
13+ public BlogEntry Entry
14+ {
15+ get
16+ { return _Entry; }
17+ set
18+ {
19+ if (_Entry == value)
20+ return;
21+ _Entry = value;
22+ RaisePropertyChanged("Entry");
23+ }
24+ }
25+
26+ BlogEntry _Draft;
27+
28+ public BlogEntry Draft
29+ {
30+ get
31+ { return _Draft; }
32+ set
33+ {
34+ if (_Draft == value)
35+ return;
36+ _Draft = value;
37+ RaisePropertyChanged("Draft");
38+ }
39+ }
40+
41+ string _Title;
42+
43+ public string Title
44+ {
45+ get
46+ { return _Title; }
47+ set
48+ {
49+ if (_Title == value)
50+ return;
51+ _Title = value;
52+ RaisePropertyChanged("Title");
53+ }
54+ }
55+
56+ string _Content;
57+
58+ public string Content
59+ {
60+ get
61+ { return _Content; }
62+ set
63+ {
64+ if (_Content == value)
65+ return;
66+ _Content = value;
67+ RaisePropertyChanged("Content");
68+ }
69+ }
70+
71+ }
72+}
--- a/HatenaDiaryClient/Models/Hatena/HatenaDiary.cs
+++ b/HatenaDiaryClient/Models/Hatena/HatenaDiary.cs
@@ -9,22 +9,16 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
99 {
1010 public class HatenaDiary
1111 {
12- private string userName;
13- private string password;
14-
15- public HatenaDiary(string userName, string password)
16- {
17- this.userName = userName;
18- this.password = password;
19- }
12+ public string UserName { set; get; }
13+ public string Password { set; get; }
2014
2115 public Tuple<string, IEnumerable<BlogEntry>> GetEntrys(int page = 1)
2216 {
2317 var xdoc = WsseAtomConnection.Get(
24- string.Format("http://d.hatena.ne.jp/{0}/atom/blog?page={1}", this.userName, page),
18+ string.Format("http://d.hatena.ne.jp/{0}/atom/blog?page={1}", this.UserName, page),
2519 Encoding.UTF8,
26- this.userName,
27- this.password);
20+ this.UserName,
21+ this.Password);
2822 var title = xdoc.Root.Element(XmlNamespaces.Atom + "title").Value;
2923 var entrys = xdoc.Root.Elements(XmlNamespaces.Atom + "entry").Select(_ => new BlogEntry(_));
3024 return Tuple.Create(title, entrys);
@@ -43,11 +37,11 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
4337 public BlogEntry PostEntry(string title, string content, DateTime? updated = null)
4438 {
4539 var reXml = WsseAtomConnection.Post(
46- string.Format("http://d.hatena.ne.jp/{0}/atom/blog", this.userName),
40+ string.Format("http://d.hatena.ne.jp/{0}/atom/blog", this.UserName),
4741 CreatePostEntryXml(title, content, updated),
4842 Encoding.UTF8,
49- this.userName,
50- this.password);
43+ this.UserName,
44+ this.Password);
5145 return new BlogEntry(reXml.Root)
5246 {
5347 HatenaSyntax = content
@@ -57,21 +51,21 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
5751 public BlogEntry GetEntry(string dateId)
5852 {
5953 var xdoc = WsseAtomConnection.Get(
60- string.Format("http://d.hatena.ne.jp/{0}/atom/blog/{1}", this.userName, dateId),
54+ string.Format("http://d.hatena.ne.jp/{0}/atom/blog/{1}", this.UserName, dateId),
6155 Encoding.UTF8,
62- this.userName,
63- this.password);
56+ this.UserName,
57+ this.Password);
6458 return new BlogEntry(xdoc.Root);
6559 }
6660
6761 public BlogEntry EditEntry(string dateId, string title, string content, DateTime? updated = null)
6862 {
6963 var reXml = WsseAtomConnection.Put(
70- string.Format("http://d.hatena.ne.jp/{0}/atom/blog/{1}", this.userName, dateId),
64+ string.Format("http://d.hatena.ne.jp/{0}/atom/blog/{1}", this.UserName, dateId),
7165 CreatePostEntryXml(title, content, updated),
7266 Encoding.UTF8,
73- this.userName,
74- this.password);
67+ this.UserName,
68+ this.Password);
7569 return new BlogEntry(reXml.Root)
7670 {
7771 HatenaSyntax = content
@@ -81,18 +75,18 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
8175 public void DeleteEntry(string dateId)
8276 {
8377 WsseAtomConnection.Delete(
84- string.Format("http://d.hatena.ne.jp/{0}/atom/blog/{1}", this.userName, dateId),
85- this.userName,
86- this.password);
78+ string.Format("http://d.hatena.ne.jp/{0}/atom/blog/{1}", this.UserName, dateId),
79+ this.UserName,
80+ this.Password);
8781 }
8882
8983 public Tuple<string, IEnumerable<BlogEntry>> GetDrafts(int page = 1)
9084 {
9185 var xdoc = WsseAtomConnection.Get(
92- string.Format("http://d.hatena.ne.jp/{0}/atom/draft?page={1}", this.userName, page),
86+ string.Format("http://d.hatena.ne.jp/{0}/atom/draft?page={1}", this.UserName, page),
9387 Encoding.UTF8,
94- this.userName,
95- this.password);
88+ this.UserName,
89+ this.Password);
9690 var title = xdoc.Root.Element(XmlNamespaces.Atom + "title").Value;
9791 var entrys = xdoc.Root.Elements(XmlNamespaces.Atom + "entry").Select(_ => new BlogEntry(_));
9892 return Tuple.Create(title, entrys);
@@ -101,11 +95,11 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
10195 public BlogEntry PostDraft(string title, string content, DateTime? updated = null)
10296 {
10397 var reXml = WsseAtomConnection.Post(
104- string.Format("http://d.hatena.ne.jp/{0}/atom/draft", this.userName),
98+ string.Format("http://d.hatena.ne.jp/{0}/atom/draft", this.UserName),
10599 CreatePostEntryXml(title, content, updated),
106100 Encoding.UTF8,
107- this.userName,
108- this.password);
101+ this.UserName,
102+ this.Password);
109103 return new BlogEntry(reXml.Root)
110104 {
111105 HatenaSyntax = content
@@ -115,21 +109,21 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
115109 public BlogEntry GetDraft(string id)
116110 {
117111 var xdoc = WsseAtomConnection.Get(
118- string.Format("http://d.hatena.ne.jp/{0}/atom/draft/{1}", this.userName, id),
112+ string.Format("http://d.hatena.ne.jp/{0}/atom/draft/{1}", this.UserName, id),
119113 Encoding.UTF8,
120- this.userName,
121- this.password);
114+ this.UserName,
115+ this.Password);
122116 return new BlogEntry(xdoc.Root);
123117 }
124118
125119 public BlogEntry EditDraft(string id, string title, string content, DateTime? updated = null)
126120 {
127121 var reXml = WsseAtomConnection.Put(
128- string.Format("http://d.hatena.ne.jp/{0}/atom/draft/{1}", this.userName, id),
122+ string.Format("http://d.hatena.ne.jp/{0}/atom/draft/{1}", this.UserName, id),
129123 CreatePostEntryXml(title, content, updated),
130124 Encoding.UTF8,
131- this.userName,
132- this.password);
125+ this.UserName,
126+ this.Password);
133127 return new BlogEntry(reXml.Root)
134128 {
135129 HatenaSyntax = content
@@ -139,9 +133,9 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
139133 public void DeleteDraft(string id)
140134 {
141135 WsseAtomConnection.Delete(
142- string.Format("http://d.hatena.ne.jp/{0}/atom/draft/{1}", this.userName, id),
143- this.userName,
144- this.password);
136+ string.Format("http://d.hatena.ne.jp/{0}/atom/draft/{1}", this.UserName, id),
137+ this.UserName,
138+ this.Password);
145139 }
146140
147141 public BlogEntry PublishDraft(string id)
@@ -151,13 +145,13 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
151145 WsseAtomConnection.Put(
152146 string.Format(
153147 "http://d.hatena.ne.jp/{0}/atom/draft/{1}",
154- this.userName,
148+ this.UserName,
155149 id),
156150 new NameValueCollection() { { "X-HATENA-PUBLISH", "1" } },
157151 null,
158152 Encoding.UTF8,
159- this.userName,
160- this.password)
153+ this.UserName,
154+ this.Password)
161155 )
162156 );
163157 }
--- a/HatenaDiaryClient/Models/Hatena/HatenaFotolife.cs
+++ b/HatenaDiaryClient/Models/Hatena/HatenaFotolife.cs
@@ -9,14 +9,8 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
99 {
1010 public class HatenaFotolife
1111 {
12- private string userName;
13- private string password;
14-
15- public HatenaFotolife(string userName, string password)
16- {
17- this.userName = userName;
18- this.password = password;
19- }
12+ public string UserName { set; get; }
13+ public string Password { set; get; }
2014
2115 public FotolifeEntry Upload(string title, string fileName, string folder = null)
2216 {
@@ -81,8 +75,8 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
8175 "http://f.hatena.ne.jp/atom/post",
8276 new XDocument(entry),
8377 Encoding.GetEncoding("shift_jis"),
84- this.userName,
85- this.password);
78+ this.UserName,
79+ this.Password);
8680 return new FotolifeEntry(reXml.Root);
8781 }
8882
@@ -92,8 +86,8 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
9286 WsseAtomConnection.Get(
9387 "http://f.hatena.ne.jp/atom/edit/" + id,
9488 Encoding.UTF8,
95- this.userName,
96- this.password
89+ this.UserName,
90+ this.Password
9791 )
9892 .Root
9993 );
@@ -113,16 +107,16 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
113107 .ToString()
114108 ),
115109 null,
116- this.userName,
117- this.password);
110+ this.UserName,
111+ this.Password);
118112 }
119113
120114 public void DeleteEntry(string id)
121115 {
122116 WsseAtomConnection.Delete(
123117 "http://f.hatena.ne.jp/atom/edit/" + id,
124- this.userName,
125- this.password);
118+ this.UserName,
119+ this.Password);
126120 }
127121
128122 public IEnumerable<FotolifeEntry> GetEntrys(int page = 1)
@@ -130,8 +124,8 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
130124 return WsseAtomConnection.Get(
131125 "http://f.hatena.ne.jp/atom/feed?page=" + page.ToString(),
132126 Encoding.UTF8,
133- this.userName,
134- this.password
127+ this.UserName,
128+ this.Password
135129 )
136130 .Root
137131 .Elements(XmlNamespaces.Atom02Spec + "entry")
--- a/HatenaDiaryClient/Models/Model.cs
+++ b/HatenaDiaryClient/Models/Model.cs
@@ -1,10 +1,13 @@
11 using System;
22 using System.Collections.Generic;
3+using System.ComponentModel;
34 using System.Linq;
45 using System.Text;
56
67 using Livet;
78
9+using Azyobuzi.HatenaDiaryClient.Models.Hatena;
10+
811 namespace Azyobuzi.HatenaDiaryClient.Models
912 {
1013 internal class Model : NotifyObject
@@ -12,5 +15,67 @@ namespace Azyobuzi.HatenaDiaryClient.Models
1215 /*
1316 * NotifyObjectはプロパティ変更通知の仕組みを実装したオブジェクトです。
1417 */
18+
19+ internal Model()
20+ {
21+ Editing = new BlogItem();
22+ }
23+
24+ private Settings settings;
25+ public Settings Settings
26+ {
27+ set
28+ {
29+ if (this.settings != null)
30+ this.settings.PropertyChanged -= this.Settings_PropertyChanged;
31+ this.settings = value;
32+ this.settings.PropertyChanged += this.Settings_PropertyChanged;
33+ this.Settings_PropertyChanged(this.settings, new PropertyChangedEventArgs("HatenaId"));//キモい
34+ this.RaisePropertyChanged("Settings");
35+ }
36+ get
37+ {
38+ if (this.settings == null)
39+ this.Settings = Settings.Load();
40+ return this.settings;
41+ }
42+ }
43+
44+ private void Settings_PropertyChanged(object sender, PropertyChangedEventArgs e)
45+ {
46+ switch (e.PropertyName)
47+ {
48+ case "HatenaId":
49+ case "Password":
50+ diary.UserName = this.Settings.HatenaId;
51+ diary.Password = this.Settings.Password;
52+ fotolife.UserName = this.Settings.HatenaId;
53+ fotolife.Password = this.Settings.Password;
54+ break;
55+ }
56+ }
57+
58+ /// <summary>
59+ /// ID・パスワードが設定済みか
60+ /// </summary>
61+ public bool SetIdPassword
62+ {
63+ get
64+ {
65+ return !string.IsNullOrEmpty(this.Settings.HatenaId) &&
66+ !string.IsNullOrEmpty(this.Settings.Password);
67+ }
68+ }
69+
70+ private HatenaDiary diary = new HatenaDiary();
71+ private HatenaFotolife fotolife = new HatenaFotolife();
72+
73+ public BlogItem Editing { private set; get; }
74+
75+ public void Post()
76+ {
77+ var re = diary.PostEntry(this.Editing.Title, this.Editing.Content);
78+ this.Editing.Entry = re;
79+ }
1580 }
1681 }
--- /dev/null
+++ b/HatenaDiaryClient/Models/Settings.cs
@@ -0,0 +1,78 @@
1+using System;
2+using System.IO;
3+using System.Reflection;
4+using System.Text;
5+using System.Xml.Serialization;
6+using Livet;
7+
8+namespace Azyobuzi.HatenaDiaryClient.Models
9+{
10+ public class Settings : NotifyObject, ICloneable
11+ {
12+ private static readonly string settingsFile =
13+ Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) + @"\settings.xml";
14+
15+ private Settings() { }
16+
17+ string _HatenaId;
18+
19+ public string HatenaId
20+ {
21+ get
22+ { return _HatenaId; }
23+ set
24+ {
25+ if (_HatenaId == value)
26+ return;
27+ _HatenaId = value;
28+ RaisePropertyChanged("HatenaId");
29+ }
30+ }
31+
32+ string _Password;
33+
34+ public string Password
35+ {
36+ get
37+ { return _Password; }
38+ set
39+ {
40+ if (_Password == value)
41+ return;
42+ _Password = value;
43+ RaisePropertyChanged("Password");
44+ }
45+ }
46+
47+ public static Settings Load()
48+ {
49+ try
50+ {
51+ using (var sr = new StreamReader(settingsFile))
52+ {
53+ var xs = new XmlSerializer(typeof(Settings));
54+ return (Settings)xs.Deserialize(sr);
55+ }
56+ }
57+ catch
58+ {
59+ return new Settings();
60+ }
61+ }
62+
63+ public void Save()
64+ {
65+ using (var sw = new StreamWriter(settingsFile))
66+ {
67+ var xs = new XmlSerializer(typeof(Settings));
68+ xs.Serialize(sw, this);
69+ }
70+ }
71+
72+ public object Clone()
73+ {
74+ this.Save();
75+ return Load();
76+ }
77+ }
78+}
--- a/HatenaDiaryClient/ViewModels/MainWindowViewModel.cs
+++ b/HatenaDiaryClient/ViewModels/MainWindowViewModel.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
33 using System.Linq;
44 using System.Text;
55 using System.ComponentModel;
6+using System.Reflection;
67
78 using Livet;
89 using Livet.Command;
@@ -14,7 +15,7 @@ using Azyobuzi.HatenaDiaryClient.Models;
1415
1516 namespace Azyobuzi.HatenaDiaryClient.ViewModels
1617 {
17- public class MainWindowViewModel : ViewModel
18+ class MainWindowViewModel : ViewModel
1819 {
1920 /*コマンド、プロパティの定義にはそれぞれ
2021 *
@@ -38,5 +39,85 @@ namespace Azyobuzi.HatenaDiaryClient.ViewModels
3839 * Modelからの変更通知などの各種イベントをそのままViewModelで購読する事はメモリリークの
3940 * 原因となりやすく推奨できません。ViewModelHelperの各静的メソッドの利用を検討してください。
4041 */
42+
43+ public MainWindowViewModel()
44+ {
45+ ViewModelHelper.BindNotifyChanged(this.model, this, (sender, e) =>
46+ {
47+ if (this.GetType().GetMember(e.PropertyName, BindingFlags.Instance | BindingFlags.GetProperty) != null)
48+ {
49+ this.RaisePropertyChanged(e.PropertyName);
50+ }
51+ });
52+ }
53+
54+ Model model = new Model();
55+
56+ public Settings Settings
57+ {
58+ set
59+ {
60+ model.Settings = value;
61+ }
62+ get
63+ {
64+ return model.Settings;
65+ }
66+ }
67+
68+ public BlogItem Editing
69+ {
70+ get
71+ {
72+ return model.Editing;
73+ }
74+ }
75+
76+
77+ #region PostCommand
78+ DelegateCommand _PostCommand;
79+
80+ public DelegateCommand PostCommand
81+ {
82+ get
83+ {
84+ if (_PostCommand == null)
85+ _PostCommand = new DelegateCommand(Post, CanPost);
86+ return _PostCommand;
87+ }
88+ }
89+
90+ private bool CanPost()
91+ {
92+ return this.model.SetIdPassword && !string.IsNullOrEmpty(this.Editing.Content);
93+ }
94+
95+ private void Post()
96+ {
97+ this.model.Post();
98+ }
99+ #endregion
100+
101+ #region ShowSettingsWindowCommand
102+ DelegateCommand _ShowSettingsWindowCommand;
103+
104+ public DelegateCommand ShowSettingsWindowCommand
105+ {
106+ get
107+ {
108+ if (_ShowSettingsWindowCommand == null)
109+ _ShowSettingsWindowCommand = new DelegateCommand(ShowSettingsWindow);
110+ return _ShowSettingsWindowCommand;
111+ }
112+ }
113+
114+ private void ShowSettingsWindow()
115+ {
116+ this.Messenger.Raise(new TransitionMessage(
117+ new SettingsWindowViewModel(this.Settings),
118+ "ShowSettingsWindow"));
119+ }
120+ #endregion
121+
41122 }
42123 }
--- /dev/null
+++ b/HatenaDiaryClient/ViewModels/SettingsWindowViewModel.cs
@@ -0,0 +1,85 @@
1+using Azyobuzi.HatenaDiaryClient.Models;
2+using Livet;
3+using Livet.Command;
4+using Livet.Messaging;
5+using Livet.Messaging.Window;
6+
7+namespace Azyobuzi.HatenaDiaryClient.ViewModels
8+{
9+ class SettingsWindowViewModel : ViewModel
10+ {
11+ public SettingsWindowViewModel(Settings settings)
12+ {
13+ this.Settings = settings;
14+ }
15+
16+ private Settings settings;
17+
18+ public Settings Settings
19+ {
20+ get { return settings; }
21+ set
22+ {
23+ settings = value;
24+
25+ #region 設定読み取り
26+ this.HatenaId = this.settings.HatenaId;
27+ this.Password = this.settings.Password;
28+ #endregion
29+ }
30+ }
31+
32+
33+ #region 設定項目
34+ public string HatenaId { set; get; }
35+ public string Password { set; get; }
36+ #endregion
37+
38+ #region SaveCommand
39+ DelegateCommand _SaveCommand;
40+
41+ public DelegateCommand SaveCommand
42+ {
43+ get
44+ {
45+ if (_SaveCommand == null)
46+ _SaveCommand = new DelegateCommand(Save);
47+ return _SaveCommand;
48+ }
49+ }
50+
51+ private void Save()
52+ {
53+ this.Messenger.Raise(new InteractionMessage("ReqSetValues"));
54+
55+ #region 設定適用
56+ this.Settings.HatenaId = this.HatenaId;
57+ this.Settings.Password = this.Password;
58+ #endregion
59+
60+ this.Settings.Save();
61+ this.Cancel();
62+ }
63+ #endregion
64+
65+ #region CancelCommand
66+ DelegateCommand _CancelCommand;
67+
68+ public DelegateCommand CancelCommand
69+ {
70+ get
71+ {
72+ if (_CancelCommand == null)
73+ _CancelCommand = new DelegateCommand(Cancel);
74+ return _CancelCommand;
75+ }
76+ }
77+
78+ private void Cancel()
79+ {
80+ this.Messenger.Raise(new WindowActionMessage("Close", WindowAction.Close));
81+ }
82+ #endregion
83+
84+ }
85+}
--- a/HatenaDiaryClient/Views/MainWindow.xaml
+++ b/HatenaDiaryClient/Views/MainWindow.xaml
@@ -6,11 +6,23 @@
66 xmlns:l="http://schemas.livet-mvvm.net/2011/wpf"
77 xmlns:v="clr-namespace:Azyobuzi.HatenaDiaryClient.Views"
88 xmlns:vm="clr-namespace:Azyobuzi.HatenaDiaryClient.ViewModels"
9- Title="HatenaDiaryClient" Height="420" Width="600">
9+ Title="HatenaDiaryClient"
10+ Height="470" Width="600"
11+ DataContext="{DynamicResource MainWindowViewModel}">
12+
13+ <Window.Resources>
14+ <vm:MainWindowViewModel x:Key="MainWindowViewModel"/>
15+ </Window.Resources>
1016
11- <Window.DataContext>
12- <vm:MainWindowViewModel/>
13- </Window.DataContext>
17+ <i:Interaction.Triggers>
18+ <l:InteractionMessageTrigger MessageKey="ShowSettingsWindow" Messenger="{Binding Messenger}">
19+ <l:InteractionTransitionAction WindowType="v:SettingsWindow" Mode="Modal"/>
20+ </l:InteractionMessageTrigger>
21+
22+ <i:EventTrigger EventName="Closing">
23+ <ei:CallMethodAction TargetObject="{Binding Settings}" MethodName="Save"/>
24+ </i:EventTrigger>
25+ </i:Interaction.Triggers>
1426
1527 <Grid>
1628 <Grid.RowDefinitions>
@@ -22,12 +34,12 @@
2234
2335 <Menu Grid.Row="0">
2436 <MenuItem Header="ファイル(_F)">
25-
37+ <MenuItem Header="設定(_O)" Command="{Binding ShowSettingsWindowCommand}"/>
2638 </MenuItem>
2739 </Menu>
2840
29- <StackPanel Grid.Row="1" Orientation="Horizontal" Background="LightSteelBlue">
30- <StackPanel.Resources>
41+ <WrapPanel Grid.Row="1" Orientation="Horizontal" Background="LightSteelBlue">
42+ <WrapPanel.Resources>
3143 <Style TargetType="Image">
3244 <Setter Property="HorizontalAlignment" Value="Center"/>
3345 <Setter Property="Width" Value="32"/>
@@ -39,15 +51,15 @@
3951 <Style TargetType="Button">
4052 <Setter Property="Width" Value="50"/>
4153 </Style>
42- </StackPanel.Resources>
54+ </WrapPanel.Resources>
4355
44- <Button>
56+ <Button Command="{Binding PostCommand}">
4557 <StackPanel>
4658 <Image Source="/HatenaDiaryClient;component/Images/Send%20Document.png" />
4759 <TextBlock Text="投稿"/>
4860 </StackPanel>
4961 </Button>
50- </StackPanel>
62+ </WrapPanel>
5163
5264 <Grid Grid.Row="2" Background="LightBlue">
5365 <Grid.ColumnDefinitions>
@@ -56,9 +68,9 @@
5668 </Grid.ColumnDefinitions>
5769
5870 <TextBlock Grid.Column="0" Text="タイトル :" Margin="3,3,3,3" VerticalAlignment="Center" Foreground="White"/>
59- <TextBox Grid.Column="1" Margin="3,3,3,3"/>
71+ <TextBox Grid.Column="1" Margin="3,3,3,3" Text="{Binding Editing.Title, UpdateSourceTrigger=PropertyChanged}"/>
6072 </Grid>
6173
62- <TextBox Grid.Row="3" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" />
74+ <TextBox Grid.Row="3" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" Text="{Binding Editing.Content, UpdateSourceTrigger=PropertyChanged}"/>
6375 </Grid>
6476 </Window>
--- /dev/null
+++ b/HatenaDiaryClient/Views/SettingsWindow.xaml
@@ -0,0 +1,74 @@
1+<Window x:Class="Azyobuzi.HatenaDiaryClient.Views.SettingsWindow"
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+ Title="設定"
8+ Height="350" Width="400"
9+ ShowInTaskbar="False"
10+ WindowStartupLocation="CenterOwner">
11+
12+ <i:Interaction.Triggers>
13+ <l:InteractionMessageTrigger MessageKey="Close" Messenger="{Binding Messenger}">
14+ <l:InteractionWindowAction/>
15+ </l:InteractionMessageTrigger>
16+ </i:Interaction.Triggers>
17+
18+ <Grid>
19+ <Grid.RowDefinitions>
20+ <RowDefinition/>
21+ <RowDefinition Height="auto"/>
22+ </Grid.RowDefinitions>
23+ <TabControl Grid.Row="0">
24+ <TabControl.Resources>
25+ <Style TargetType="TextBlock">
26+ <Setter Property="VerticalAlignment" Value="Center"/>
27+ </Style>
28+ </TabControl.Resources>
29+ <TabControl.Items>
30+ <TabItem Header="全般">
31+ <Grid Margin="5,5,5,5">
32+ <Grid.ColumnDefinitions>
33+ <ColumnDefinition Width="80"/>
34+ <ColumnDefinition Width="170"/>
35+ </Grid.ColumnDefinitions>
36+ <Grid.RowDefinitions>
37+ <RowDefinition Height="auto"/>
38+ <RowDefinition Height="auto"/>
39+ </Grid.RowDefinitions>
40+
41+ <TextBlock Text="はてなID :" Grid.Column="0" Grid.Row="0"/>
42+ <TextBox Grid.Column="1" Grid.Row="0" Text="{Binding HatenaId}"/>
43+
44+ <TextBlock Text="パスワード :" Grid.Column="0" Grid.Row="1"/>
45+ <PasswordBox Grid.Column="1" Grid.Row="1">
46+ <i:Interaction.Triggers>
47+ <i:EventTrigger EventName="Loaded">
48+ <ei:ChangePropertyAction PropertyName="Password"
49+ Value="{Binding Password}"/>
50+ </i:EventTrigger>
51+
52+ <l:InteractionMessageTrigger MessageKey="ReqSetValues" Messenger="{Binding Messenger}">
53+ <l:PasswordBoxSetStateToSourceAction Property="Password"
54+ Source="{Binding Password}"/>
55+ </l:InteractionMessageTrigger>
56+ </i:Interaction.Triggers>
57+ </PasswordBox>
58+ </Grid>
59+ </TabItem>
60+ </TabControl.Items>
61+ </TabControl>
62+
63+ <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right">
64+ <StackPanel.Resources>
65+ <Style TargetType="Button">
66+ <Setter Property="Width" Value="80"/>
67+ </Style>
68+ </StackPanel.Resources>
69+
70+ <Button Content="OK" Command="{Binding SaveCommand}"/>
71+ <Button Content="キャンセル" Command="{Binding CancelCommand}"/>
72+ </StackPanel>
73+ </Grid>
74+</Window>
--- /dev/null
+++ b/HatenaDiaryClient/Views/SettingsWindow.xaml.cs
@@ -0,0 +1,26 @@
1+using System;
2+using System.Collections.Generic;
3+using System.Linq;
4+using System.Text;
5+using System.Windows;
6+using System.Windows.Controls;
7+using System.Windows.Data;
8+using System.Windows.Documents;
9+using System.Windows.Input;
10+using System.Windows.Media;
11+using System.Windows.Media.Imaging;
12+using System.Windows.Shapes;
13+
14+namespace Azyobuzi.HatenaDiaryClient.Views
15+{
16+ /// <summary>
17+ /// SettingsWindow.xaml の相互作用ロジック
18+ /// </summary>
19+ public partial class SettingsWindow : Window
20+ {
21+ public SettingsWindow()
22+ {
23+ InitializeComponent();
24+ }
25+ }
26+}