Bug correction in Messenger: Made CleanupList thread safe.
Bug correction: Removed AllowPartiallyTrustedCallers to avoid issues with EventToCommand.
EventToCommand can now be attached to Storyboards and other DependendencyObjects (does not work in WPF or WP7)
Added NotifyPropertyChanged class and made ViewModelBase inherit from it.
ViewModelBase does not implement IDisposable anymore.
Generating XML documentation file also in Release mode.
Cleaned up RelayCommand (no new functionality).
Added WP7 unit test project to WP7 solution and removed from global solution (to avoid starting the emulator every time).
A few other cleanup changes.
Added BAT file utility to copy all DLLs in a _Binaries folder (making it easier to install a new version to C:\Program Files\Laurent Bugnion (GalaSoft)\MVVM Light Toolkit\Binaries).
This commit is contained in:
Laurent Bugnion 2011-03-20 16:30:22 +01:00
Родитель ca92dfbfa2
Коммит 1a142cf254
38 изменённых файлов: 683 добавлений и 272 удалений

Просмотреть файл

@ -79,8 +79,6 @@ namespace GalaSoft.MvvmLight.Command
/// <summary>
/// Raises the <see cref="CanExecuteChanged" /> event.
/// </summary>
[SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic",
Justification = "The this keyword is used in the Silverlight version")]
[SuppressMessage("Microsoft.Design", "CA1030:UseEventsWhereAppropriate",
Justification = "This cannot be an event")]
public void RaiseCanExecuteChanged()

Просмотреть файл

@ -74,8 +74,6 @@ namespace GalaSoft.MvvmLight.Command
/// <summary>
/// Raises the <see cref="CanExecuteChanged" /> event.
/// </summary>
[SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic",
Justification = "The this keyword is used in the Silverlight version")]
[SuppressMessage("Microsoft.Design", "CA1030:UseEventsWhereAppropriate",
Justification = "This cannot be an event")]
public void RaiseCanExecuteChanged()

Просмотреть файл

@ -63,6 +63,7 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<DocumentationFile>bin\Release\GalaSoft.MvvmLight.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="PresentationCore">
@ -98,6 +99,7 @@
<Compile Include="Messaging\MessageBase.cs" />
<Compile Include="Messaging\Messenger.cs" />
<Compile Include="Messaging\PropertyChangedMessage.cs" />
<Compile Include="NotifyPropertyChanged.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Command\RelayCommand.cs" />
<Compile Include="Command\RelayCommandGeneric.cs" />

Просмотреть файл

@ -1,4 +1,4 @@
// **************************************************************************
// ****************************************************************************
// <copyright file="Messenger.cs" company="GalaSoft Laurent Bugnion">
// Copyright © GalaSoft Laurent Bugnion 2009-2011
// </copyright>
@ -11,7 +11,7 @@
// <license>
// See license.txt in this project or http://www.galasoft.ch/license_MIT.txt
// </license>
// <LastBaseLevel>BL0012</LastBaseLevel>
// <LastBaseLevel>BL0013</LastBaseLevel>
// ****************************************************************************
using System;
@ -28,17 +28,16 @@ namespace GalaSoft.MvvmLight.Messaging
/// The Messenger is a class allowing objects to exchange messages.
/// </summary>
////[ClassInfo(typeof(Messenger),
//// VersionString = "4.0.0.0/BL0012",
//// DateString = "201102061040",
//// VersionString = "4.0.0.0/BL0013",
//// DateString = "201103201550",
//// Description = "A messenger class allowing a class to send a message to multiple recipients",
//// UrlContacts = "http://www.galasoft.ch/contact_en.html",
//// Email = "laurent@galasoft.ch")]
public class Messenger : IMessenger
{
private static Messenger _defaultInstance;
private readonly object _registerLock = new object();
private Dictionary<Type, List<WeakActionAndToken>> _recipientsOfSubclassesAction;
private Dictionary<Type, List<WeakActionAndToken>> _recipientsStrictAction;
/// <summary>
@ -53,23 +52,7 @@ namespace GalaSoft.MvvmLight.Messaging
}
}
/// <summary>
/// Provides a way to override the Messenger.Default instance with
/// a custom instance, for example for unit testing purposes.
/// </summary>
/// <param name="newMessenger">The instance that will be used as Messenger.Default.</param>
public static void OverrideDefault(Messenger newMessenger)
{
_defaultInstance = newMessenger;
}
/// <summary>
/// Sets the Messenger's default (static) instance to null.
/// </summary>
public static void Reset()
{
_defaultInstance = null;
}
#region IMessenger Members
/// <summary>
/// Registers a recipient for a type of message TMessage. The action
@ -177,49 +160,52 @@ namespace GalaSoft.MvvmLight.Messaging
bool receiveDerivedMessagesToo,
Action<TMessage> action)
{
var messageType = typeof(TMessage);
Dictionary<Type, List<WeakActionAndToken>> recipients;
if (receiveDerivedMessagesToo)
lock (_registerLock)
{
if (_recipientsOfSubclassesAction == null)
Type messageType = typeof(TMessage);
Dictionary<Type, List<WeakActionAndToken>> recipients;
if (receiveDerivedMessagesToo)
{
_recipientsOfSubclassesAction = new Dictionary<Type, List<WeakActionAndToken>>();
if (_recipientsOfSubclassesAction == null)
{
_recipientsOfSubclassesAction = new Dictionary<Type, List<WeakActionAndToken>>();
}
recipients = _recipientsOfSubclassesAction;
}
else
{
if (_recipientsStrictAction == null)
{
_recipientsStrictAction = new Dictionary<Type, List<WeakActionAndToken>>();
}
recipients = _recipientsStrictAction;
}
recipients = _recipientsOfSubclassesAction;
}
else
{
if (_recipientsStrictAction == null)
List<WeakActionAndToken> list;
if (!recipients.ContainsKey(messageType))
{
_recipientsStrictAction = new Dictionary<Type, List<WeakActionAndToken>>();
list = new List<WeakActionAndToken>();
recipients.Add(messageType, list);
}
else
{
list = recipients[messageType];
}
recipients = _recipientsStrictAction;
var weakAction = new WeakAction<TMessage>(recipient, action);
var item = new WeakActionAndToken
{
Action = weakAction,
Token = token
};
list.Add(item);
}
List<WeakActionAndToken> list;
if (!recipients.ContainsKey(messageType))
{
list = new List<WeakActionAndToken>();
recipients.Add(messageType, list);
}
else
{
list = recipients[messageType];
}
var weakAction = new WeakAction<TMessage>(recipient, action);
var item = new WeakActionAndToken
{
Action = weakAction,
Token = token
};
list.Add(item);
Cleanup();
}
@ -358,6 +344,26 @@ namespace GalaSoft.MvvmLight.Messaging
Cleanup();
}
#endregion
/// <summary>
/// Provides a way to override the Messenger.Default instance with
/// a custom instance, for example for unit testing purposes.
/// </summary>
/// <param name="newMessenger">The instance that will be used as Messenger.Default.</param>
public static void OverrideDefault(Messenger newMessenger)
{
_defaultInstance = newMessenger;
}
/// <summary>
/// Sets the Messenger's default (static) instance to null.
/// </summary>
public static void Reset()
{
_defaultInstance = null;
}
private static void CleanupList(IDictionary<Type, List<WeakActionAndToken>> lists)
{
if (lists == null)
@ -365,33 +371,36 @@ namespace GalaSoft.MvvmLight.Messaging
return;
}
var listsToRemove = new List<Type>();
foreach (var list in lists)
lock (lists)
{
var recipientsToRemove = new List<WeakActionAndToken>();
foreach (var item in list.Value)
var listsToRemove = new List<Type>();
foreach (var list in lists)
{
if (item.Action == null
|| !item.Action.IsAlive)
var recipientsToRemove = new List<WeakActionAndToken>();
foreach (WeakActionAndToken item in list.Value)
{
recipientsToRemove.Add(item);
if (item.Action == null
|| !item.Action.IsAlive)
{
recipientsToRemove.Add(item);
}
}
foreach (WeakActionAndToken recipient in recipientsToRemove)
{
list.Value.Remove(recipient);
}
if (list.Value.Count == 0)
{
listsToRemove.Add(list.Key);
}
}
foreach (var recipient in recipientsToRemove)
foreach (Type key in listsToRemove)
{
list.Value.Remove(recipient);
lists.Remove(key);
}
if (list.Value.Count == 0)
{
listsToRemove.Add(list.Key);
}
}
foreach (var key in listsToRemove)
{
lists.Remove(key);
}
}
@ -403,8 +412,8 @@ namespace GalaSoft.MvvmLight.Messaging
return false;
}
var interfaces = instanceType.GetInterfaces();
foreach (var currentInterface in interfaces)
Type[] interfaces = instanceType.GetInterfaces();
foreach (Type currentInterface in interfaces)
{
if (currentInterface == interfaceType)
{
@ -425,9 +434,9 @@ namespace GalaSoft.MvvmLight.Messaging
{
// Clone to protect from people registering in a "receive message" method
// Bug correction Messaging BL0004.007
var listClone = list.Take(list.Count()).ToList();
List<WeakActionAndToken> listClone = list.Take(list.Count()).ToList();
foreach (var item in listClone)
foreach (WeakActionAndToken item in listClone)
{
var executeAction = item.Action as IExecuteWithObject;
@ -457,11 +466,11 @@ namespace GalaSoft.MvvmLight.Messaging
lock (lists)
{
foreach (var messageType in lists.Keys)
foreach (Type messageType in lists.Keys)
{
foreach (var item in lists[messageType])
foreach (WeakActionAndToken item in lists[messageType])
{
var weakAction = item.Action;
WeakAction weakAction = item.Action;
if (weakAction != null
&& recipient == weakAction.Target)
@ -479,7 +488,7 @@ namespace GalaSoft.MvvmLight.Messaging
Action<TMessage> action,
Dictionary<Type, List<WeakActionAndToken>> lists)
{
var messageType = typeof(TMessage);
Type messageType = typeof(TMessage);
if (recipient == null
|| lists == null
@ -491,7 +500,7 @@ namespace GalaSoft.MvvmLight.Messaging
lock (lists)
{
foreach (var item in lists[messageType])
foreach (WeakActionAndToken item in lists[messageType])
{
var weakActionCasted = item.Action as WeakAction<TMessage>;
@ -516,15 +525,16 @@ namespace GalaSoft.MvvmLight.Messaging
private void SendToTargetOrType<TMessage>(TMessage message, Type messageTargetType, object token)
{
var messageType = typeof(TMessage);
Type messageType = typeof(TMessage);
if (_recipientsOfSubclassesAction != null)
{
// Clone to protect from people registering in a "receive message" method
// Bug correction Messaging BL0008.002
var listClone = _recipientsOfSubclassesAction.Keys.Take(_recipientsOfSubclassesAction.Count()).ToList();
List<Type> listClone =
_recipientsOfSubclassesAction.Keys.Take(_recipientsOfSubclassesAction.Count()).ToList();
foreach (var type in listClone)
foreach (Type type in listClone)
{
List<WeakActionAndToken> list = null;
@ -543,7 +553,7 @@ namespace GalaSoft.MvvmLight.Messaging
{
if (_recipientsStrictAction.ContainsKey(messageType))
{
var list = _recipientsStrictAction[messageType];
List<WeakActionAndToken> list = _recipientsStrictAction[messageType];
SendToList(message, list, messageTargetType, token);
}
}
@ -551,11 +561,15 @@ namespace GalaSoft.MvvmLight.Messaging
Cleanup();
}
#region Nested type: WeakActionAndToken
private struct WeakActionAndToken
{
public WeakAction Action;
public object Token;
}
#endregion
}
}

Просмотреть файл

@ -0,0 +1,129 @@
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq.Expressions;
using System.Reflection;
namespace GalaSoft.MvvmLight
{
/// <summary>
/// A base class for the ViewModel classes in the MVVM pattern.
/// </summary>
//// [ClassInfo(typeof(ViewModelBase))]
public abstract class NotifyPropertyChanged : INotifyPropertyChanged
{
/// <summary>
/// Occurs when a property value changes.
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Provides access to the PropertyChanged event handler to derived classes.
/// </summary>
protected PropertyChangedEventHandler PropertyChangedHandler
{
get
{
return PropertyChanged;
}
}
/// <summary>
/// Verifies that a property name exists in this ViewModel. This method
/// can be called before the property is used, for instance before
/// calling RaisePropertyChanged. It avoids errors when a property name
/// is changed but some places are missed.
/// <para>This method is only active in DEBUG mode.</para>
/// </summary>
/// <param name="propertyName"></param>
[Conditional("DEBUG")]
[DebuggerStepThrough]
public void VerifyPropertyName(string propertyName)
{
var myType = this.GetType();
if (myType.GetProperty(propertyName) == null)
{
throw new ArgumentException("Property not found", propertyName);
}
}
/// <summary>
/// Raises the PropertyChanged event if needed.
/// </summary>
/// <remarks>If the propertyName parameter
/// does not correspond to an existing property on the current class, an
/// exception is thrown in DEBUG configuration only.</remarks>
/// <param name="propertyName">The name of the property that
/// changed.</param>
[SuppressMessage("Microsoft.Design", "CA1030:UseEventsWhereAppropriate",
Justification = "This cannot be an event")]
protected virtual void RaisePropertyChanged(string propertyName)
{
VerifyPropertyName(propertyName);
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
/// <summary>
/// Raises the PropertyChanged event if needed.
/// </summary>
/// <typeparam name="T">The type of the property that
/// changed.</typeparam>
/// <param name="propertyExpression">An expression identifying the property
/// that changed.</param>
[SuppressMessage("Microsoft.Design", "CA1030:UseEventsWhereAppropriate",
Justification = "This cannot be an event")]
[SuppressMessage(
"Microsoft.Design",
"CA1006:GenericMethodsShouldProvideTypeParameter",
Justification = "This syntax is more convenient than other alternatives.")]
protected virtual void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression)
{
if (propertyExpression == null)
{
return;
}
var handler = PropertyChanged;
if (handler != null)
{
var body = propertyExpression.Body as MemberExpression;
var expression = body.Expression as ConstantExpression;
handler(expression.Value, new PropertyChangedEventArgs(body.Member.Name));
}
}
/// <summary>
/// When called in a property setter, raises the PropertyChanged event for
/// the current property.
/// </summary>
/// <exception cref="InvalidOperationException">If this method is called outside
/// of a property setter.</exception>
[SuppressMessage("Microsoft.Design", "CA1030:UseEventsWhereAppropriate",
Justification = "This cannot be an event")]
protected virtual void RaisePropertyChanged()
{
var frames = new StackTrace();
for (var i = 0; i < frames.FrameCount; i++)
{
var frame = frames.GetFrame(i).GetMethod() as MethodInfo;
if (frame != null)
if (frame.IsSpecialName && frame.Name.StartsWith("set_", StringComparison.OrdinalIgnoreCase))
{
RaisePropertyChanged(frame.Name.Substring(4));
return;
}
}
throw new InvalidOperationException("This method can only by invoked within a property setter.");
}
}
}

Просмотреть файл

@ -18,4 +18,4 @@ using System.Runtime.InteropServices;
using System.Security;
[assembly: Guid("3cdfebcb-6e89-4a28-80eb-8c8d18fed4b7")]
[assembly: AllowPartiallyTrustedCallers]
//[assembly: AllowPartiallyTrustedCallers]

Просмотреть файл

@ -11,7 +11,7 @@
// <license>
// See license.txt in this project or http://www.galasoft.ch/license_MIT.txt
// </license>
// <LastBaseLevel>alpha1/BL0014</LastBaseLevel>
// <LastBaseLevel>BL0015</LastBaseLevel>
// ****************************************************************************
using System;
@ -32,7 +32,7 @@ using System.Runtime.InteropServices;
[assembly: CLSCompliant(true)]
////[assembly: AssemblyVersion("3.0.0.*")]
[assembly: AssemblyFileVersion("4.0.0.0/BL0014")]
[assembly: AssemblyFileVersion("4.0.0.0/BL0015")]
// FxCop
[module: SuppressMessage("Microsoft.Naming",

Просмотреть файл

@ -11,7 +11,7 @@
// <license>
// See license.txt in this project or http://www.galasoft.ch/license_MIT.txt
// </license>
// <LastBaseLevel>BL0009</LastBaseLevel>
// <LastBaseLevel>BL0010</LastBaseLevel>
// ****************************************************************************
using System;
@ -29,17 +29,18 @@ namespace GalaSoft.MvvmLight
{
/// <summary>
/// A base class for the ViewModel classes in the MVVM pattern.
/// <para>The IDisposable implementation of this class is obsolete, and
/// should not be used anymore. It will be removed in a future version.
/// </para>
/// </summary>
//// [ClassInfo(typeof(ViewModelBase),
//// VersionString = "4.0.0.0/BL0009",
//// DateString = "201102062240",
//// VersionString = "4.0.0.0/BL0010",
//// DateString = "201103201555",
//// Description = "A base class for the ViewModel classes in the MVVM pattern.",
//// UrlContacts = "http://www.galasoft.ch/contact_en.html",
//// Email = "laurent@galasoft.ch")]
public abstract class ViewModelBase : INotifyPropertyChanged, ICleanup, IDisposable
[SuppressMessage(
"Microsoft.Design",
"CA1012",
Justification = "Constructors should remain public to allow serialization.")]
public abstract class ViewModelBase : NotifyPropertyChanged, ICleanup
{
private static bool? _isInDesignMode;
private IMessenger _messengerInstance;
@ -143,39 +144,6 @@ namespace GalaSoft.MvvmLight
Messenger.Default.Unregister(this);
}
/// <summary>
/// Do not use this method anymore, it will be removed in a future
/// version. Use ICleanup.Cleanup() instead.
/// </summary>
public void Dispose()
{
Dispose(true);
}
/// <summary>
/// Occurs when a property value changes.
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Verifies that a property name exists in this ViewModel. This method
/// can be called before the property is used, for instance before
/// calling RaisePropertyChanged. It avoids errors when a property name
/// is changed but some places are missed.
/// <para>This method is only active in DEBUG mode.</para>
/// </summary>
/// <param name="propertyName"></param>
[Conditional("DEBUG")]
[DebuggerStepThrough]
public void VerifyPropertyName(string propertyName)
{
var myType = this.GetType();
if (myType.GetProperty(propertyName) == null)
{
throw new ArgumentException("Property not found", propertyName);
}
}
/// <summary>
/// Broadcasts a PropertyChangedMessage using either the instance of
/// the Messenger that was passed to this class (if available)
@ -195,20 +163,6 @@ namespace GalaSoft.MvvmLight
MessengerInstance.Send(message);
}
/// <summary>
/// Do not use this method anymore, it will be removed in a future
/// version. Use ICleanup.Cleanup() instead.
/// </summary>
[Obsolete("This interface will be removed from ViewModelBase in a future version, use ICleanup.Cleanup instead."
)]
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
Cleanup();
}
}
/// <summary>
/// Raises the PropertyChanged event if needed, and broadcasts a
/// PropertyChangedMessage using the Messenger instance (or the
@ -224,6 +178,9 @@ namespace GalaSoft.MvvmLight
/// occurred.</param>
/// <param name="broadcast">If true, a PropertyChangedMessage will
/// be broadcasted. If false, only the event will be raised.</param>
/// <remarks>If the propertyName parameter
/// does not correspond to an existing property on the current class, an
/// exception is thrown in DEBUG configuration only.</remarks>
[SuppressMessage("Microsoft.Design", "CA1030:UseEventsWhereAppropriate",
Justification = "This cannot be an event")]
protected virtual void RaisePropertyChanged<T>(string propertyName, T oldValue, T newValue, bool broadcast)
@ -237,41 +194,26 @@ namespace GalaSoft.MvvmLight
}
/// <summary>
/// Raises the PropertyChanged event if needed.
/// Raises the PropertyChanged event if needed, and broadcasts a
/// PropertyChangedMessage using the Messenger instance (or the
/// static default instance if no Messenger instance is available).
/// </summary>
/// <param name="propertyName">The name of the property that
/// changed.</param>
/// <typeparam name="T">The type of the property that
/// changed.</typeparam>
/// <param name="propertyExpression">An expression identifying the property
/// that changed.</param>
/// <param name="oldValue">The property's value before the change
/// occurred.</param>
/// <param name="newValue">The property's value after the change
/// occurred.</param>
/// <param name="broadcast">If true, a PropertyChangedMessage will
/// be broadcasted. If false, only the event will be raised.</param>
[SuppressMessage("Microsoft.Design", "CA1030:UseEventsWhereAppropriate",
Justification = "This cannot be an event")]
protected virtual void RaisePropertyChanged(string propertyName)
{
VerifyPropertyName(propertyName);
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
protected virtual void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression)
{
if (propertyExpression == null)
{
return;
}
var handler = PropertyChanged;
if (handler != null)
{
var body = propertyExpression.Body as MemberExpression;
var expression = body.Expression as ConstantExpression;
handler(expression.Value, new PropertyChangedEventArgs(body.Member.Name));
}
}
[SuppressMessage(
"Microsoft.Design",
"CA1006:GenericMethodsShouldProvideTypeParameter",
Justification = "This syntax is more convenient than other alternatives.")]
protected virtual void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression, T oldValue, T newValue, bool broadcast)
{
if (propertyExpression == null)
@ -279,7 +221,7 @@ namespace GalaSoft.MvvmLight
return;
}
var handler = PropertyChanged;
var handler = PropertyChangedHandler;
if (handler != null
|| broadcast)
@ -298,23 +240,5 @@ namespace GalaSoft.MvvmLight
}
}
}
protected virtual void RaisePropertyChanged()
{
var frames = new StackTrace();
for (var i = 0; i < frames.FrameCount; i++)
{
var frame = frames.GetFrame(i).GetMethod() as MethodInfo;
if (frame != null)
if (frame.IsSpecialName && frame.Name.StartsWith("set_", StringComparison.OrdinalIgnoreCase))
{
RaisePropertyChanged(frame.Name.Substring(4));
return;
}
}
throw new InvalidOperationException("RaisePropertyChanged() can only by invoked within a property setter.");
}
}
}

Просмотреть файл

@ -37,6 +37,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\GalaSoft.MvvmLight.WPF4.XML</DocumentationFile>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>true</SignAssembly>
@ -58,6 +59,9 @@
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\GalaSoft.MvvmLight %28NET35%29\NotifyPropertyChanged.cs">
<Link>NotifyPropertyChanged.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight (NET35)\Command\RelayCommand.cs">
<Link>Command\RelayCommand.cs</Link>
</Compile>

Просмотреть файл

@ -20,4 +20,4 @@ using System.Runtime.InteropServices;
using System.Security;
[assembly: Guid("4053e6aa-dac1-4b86-9478-443715f01d58")]
[assembly: AllowPartiallyTrustedCallers]
//[assembly: AllowPartiallyTrustedCallers]

Просмотреть файл

@ -76,6 +76,7 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<DocumentationFile>Bin\Release\GalaSoft.MvvmLight.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="System.Windows" />
@ -87,6 +88,9 @@
<Reference Include="System.Windows.Browser" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\GalaSoft.MvvmLight %28NET35%29\NotifyPropertyChanged.cs">
<Link>NotifyPropertyChanged.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight %28NET35%29\Properties\AssemblyInfo.cs">
<Link>Properties\AssemblyInfo.cs</Link>
</Compile>

Просмотреть файл

@ -52,6 +52,7 @@
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>Bin\Release\GalaSoft.MvvmLight.SL4.XML</DocumentationFile>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>true</SignAssembly>
@ -69,6 +70,9 @@
<Reference Include="System.Windows.Browser" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\GalaSoft.MvvmLight %28NET35%29\NotifyPropertyChanged.cs">
<Link>NotifyPropertyChanged.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight %28NET35%29\Properties\AssemblyInfo.cs">
<Link>Properties\AssemblyInfo.cs</Link>
</Compile>

Просмотреть файл

@ -5,6 +5,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Extras (
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight (WP7)", "GalaSoft.MvvmLight (WP7)\GalaSoft.MvvmLight (WP7).csproj", "{CD51F6FA-CD5B-4405-B5F1-B65CCAE8845B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Test (WP7)", "GalaSoft.MvvmLight.Test (WP7)\GalaSoft.MvvmLight.Test (WP7).csproj", "{594E864D-76B9-45B6-B2C6-AEE511673777}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -19,6 +21,12 @@ Global
{CD51F6FA-CD5B-4405-B5F1-B65CCAE8845B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CD51F6FA-CD5B-4405-B5F1-B65CCAE8845B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CD51F6FA-CD5B-4405-B5F1-B65CCAE8845B}.Release|Any CPU.Build.0 = Release|Any CPU
{594E864D-76B9-45B6-B2C6-AEE511673777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{594E864D-76B9-45B6-B2C6-AEE511673777}.Debug|Any CPU.Build.0 = Debug|Any CPU
{594E864D-76B9-45B6-B2C6-AEE511673777}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{594E864D-76B9-45B6-B2C6-AEE511673777}.Release|Any CPU.ActiveCfg = Release|Any CPU
{594E864D-76B9-45B6-B2C6-AEE511673777}.Release|Any CPU.Build.0 = Release|Any CPU
{594E864D-76B9-45B6-B2C6-AEE511673777}.Release|Any CPU.Deploy.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

Просмотреть файл

@ -41,6 +41,7 @@
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>Bin\Release\GalaSoft.MvvmLight.WP7.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="mscorlib" />
@ -51,6 +52,9 @@
<Reference Include="System.Net" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\GalaSoft.MvvmLight %28NET35%29\NotifyPropertyChanged.cs">
<Link>NotifyPropertyChanged.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight %28NET35%29\Properties\AssemblyInfo.cs">
<Link>Properties\AssemblyInfo.cs</Link>
</Compile>

Просмотреть файл

@ -197,7 +197,7 @@ namespace GalaSoft.MvvmLight.Command
}
/// <summary>
/// Called when this trigger is attached to a FrameworkElement.
/// Called when this trigger is attached to a DependencyObject.
/// </summary>
protected override void OnAttached()
{
@ -209,11 +209,11 @@ namespace GalaSoft.MvvmLight.Command
/// This method is here for compatibility
/// with the Silverlight version.
/// </summary>
/// <returns>The FrameworkElement to which this trigger
/// is attached.</returns>
/// <returns>The object to which this trigger
/// is attached casted as a FrameworkElement.</returns>
private FrameworkElement GetAssociatedObject()
{
return AssociatedObject;
return AssociatedObject as FrameworkElement;
}
/// <summary>

Просмотреть файл

@ -38,7 +38,7 @@ namespace GalaSoft.MvvmLight.Command
//// Description = "A Trigger used to bind any event to an ICommand.",
//// UrlContacts = "http://www.galasoft.ch/contact_en.html",
//// Email = "laurent@galasoft.ch")]
public partial class EventToCommand : TriggerAction<FrameworkElement>
public partial class EventToCommand : TriggerAction<DependencyObject>
{
/// <summary>
/// Gets or sets a value indicating whether the EventArgs passed to the
@ -119,9 +119,9 @@ namespace GalaSoft.MvvmLight.Command
private bool AssociatedElementIsDisabled()
{
var element = GetAssociatedObject();
return element != null
&& !element.IsEnabled;
return AssociatedObject == null
|| (element != null
&& !element.IsEnabled);
}
private void EnableDisableElement()

Просмотреть файл

@ -61,6 +61,7 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<DocumentationFile>bin\Release\GalaSoft.MvvmLight.Extras.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="PresentationCore">
@ -73,7 +74,7 @@
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Windows.Interactivity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<Reference Include="System.Windows.Interactivity">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\External\NET35\System.Windows.Interactivity.dll</HintPath>
</Reference>

Просмотреть файл

@ -18,4 +18,4 @@ using System.Runtime.InteropServices;
using System.Security;
[assembly: Guid("6ff199ef-d7c4-4e8c-919e-5813e9b8b504")]
[assembly: AllowPartiallyTrustedCallers]
//[assembly: AllowPartiallyTrustedCallers]

Просмотреть файл

@ -11,7 +11,7 @@
// <license>
// See license.txt in this project or http://www.galasoft.ch/license_MIT.txt
// </license>
// <LastBaseLevel>alpha1/BL0014</LastBaseLevel>
// <LastBaseLevel>alpha1/BL0015</LastBaseLevel>
// ****************************************************************************
using System;
@ -32,7 +32,7 @@ using System.Runtime.InteropServices;
[assembly: CLSCompliant(true)]
////[assembly: AssemblyVersion("4.0.0.*")]
[assembly: AssemblyFileVersion("4.0.0.0/BL0014")]
[assembly: AssemblyFileVersion("4.0.0.0/BL0015")]
// FxCop
[module: SuppressMessage("Microsoft.Naming",

Просмотреть файл

@ -42,7 +42,7 @@ namespace GalaSoft.MvvmLight.Command
//// Description = "A Trigger used to bind any event to an ICommand.",
//// UrlContacts = "http://www.galasoft.ch/contact_en.html",
//// Email = "laurent@galasoft.ch")]
public class EventToCommand : TriggerAction<FrameworkElement>
public class EventToCommand : TriggerAction<DependencyObject>
{
/// <summary>
/// Identifies the <see cref="CommandParameter" /> dependency property
@ -231,13 +231,13 @@ namespace GalaSoft.MvvmLight.Command
/// is attached.</returns>
private FrameworkElement GetAssociatedObject()
{
return AssociatedObject;
return AssociatedObject as FrameworkElement;
}
#endif
/// <summary>
/// This method is here for compatibility
/// with the Silverlight version.
/// with the Silverlight 3 version.
/// </summary>
/// <returns>The command that must be executed when
/// this trigger is invoked.</returns>
@ -246,6 +246,12 @@ namespace GalaSoft.MvvmLight.Command
return Command;
}
/// <summary>
/// Specifies whether the EventArgs of the event that triggered this
/// action should be passed to the bound RelayCommand. If this is true,
/// the command should accept arguments of the corresponding
/// type (for example RelayCommand&lt;MouseButtonEventArgs&gt;).
/// </summary>
public bool PassEventArgsToCommand
{
get;
@ -318,8 +324,9 @@ namespace GalaSoft.MvvmLight.Command
{
var element = GetAssociatedObject();
return element != null
&& !element.IsEnabled;
return AssociatedObject == null
|| (element != null
&& !element.IsEnabled);
}
private void EnableDisableElement()

Просмотреть файл

@ -37,6 +37,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\GalaSoft.MvvmLight.Extras.WPF4.XML</DocumentationFile>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>true</SignAssembly>

Просмотреть файл

@ -18,4 +18,4 @@ using System.Runtime.InteropServices;
using System.Security;
[assembly: Guid("c5f19cda-fe5e-4c84-8f36-1afe15e399b1")]
[assembly: AllowPartiallyTrustedCallers]
//[assembly: AllowPartiallyTrustedCallers]

Просмотреть файл

@ -73,6 +73,7 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<DocumentationFile>Bin\Release\GalaSoft.MvvmLight.Extras.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="System.Windows" />
@ -124,9 +125,7 @@
<Link>License.txt</Link>
</Content>
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Service References\" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

Просмотреть файл

@ -35,10 +35,13 @@ namespace Expression.Samples.Interactivity.DataHelpers
private DependencyPropertyListener listener;
private FrameworkElement target;
private DependencyObject target;
private object value;
/// <summary>
/// The context of the binding.
/// </summary>
public object Context
{
get;
@ -48,6 +51,7 @@ namespace Expression.Samples.Interactivity.DataHelpers
/// <summary>
/// Constructor.
/// </summary>
/// <param name="context">The context of the binding.</param>
/// <param name="changedHandler">Callback whenever the value of this binding has changed.</param>
public BindingListener(object context, ChangedHandler changedHandler)
{
@ -81,7 +85,7 @@ namespace Expression.Samples.Interactivity.DataHelpers
/// <summary>
/// The element to be used as the context on which to evaluate the binding.
/// </summary>
public FrameworkElement Element
public DependencyObject Element
{
get
{
@ -179,7 +183,7 @@ namespace Expression.Samples.Interactivity.DataHelpers
private static int index;
private FrameworkElement target;
private DependencyObject target;
public DependencyPropertyListener()
{
@ -191,7 +195,7 @@ namespace Expression.Samples.Interactivity.DataHelpers
public event EventHandler<BindingChangedEventArgs> Changed;
public void Attach(FrameworkElement element, Binding binding)
public void Attach(DependencyObject element, Binding binding)
{
if (this.target != null)
{
@ -200,7 +204,7 @@ namespace Expression.Samples.Interactivity.DataHelpers
this.target = element;
this.target.SetBinding(this.property, binding);
BindingOperations.SetBinding(target, this.property, binding);
}
public void Detach()

Просмотреть файл

@ -52,6 +52,7 @@
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>Bin\Release\GalaSoft.MvvmLight.Extras.SL4.XML</DocumentationFile>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>true</SignAssembly>

Просмотреть файл

@ -41,6 +41,7 @@
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>Bin\Release\GalaSoft.MvvmLight.Extras.WP7.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="mscorlib" />

Просмотреть файл

@ -2,6 +2,7 @@
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Interactivity;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using GalaSoft.MvvmLight.Command;
using Microsoft.VisualStudio.TestTools.UnitTesting;

Просмотреть файл

@ -9,7 +9,7 @@
<ProjectGuid>{D08856FE-520C-48D8-9C2F-69B9CFDB92BE}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>GalaSoft.MvvmLight.Test__NET35_</RootNamespace>
<RootNamespace>GalaSoft.MvvmLight.Test</RootNamespace>
<AssemblyName>GalaSoft.MvvmLight.Test %28NET35%29</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
@ -69,8 +69,11 @@
<Compile Include="Messaging\NotificationMessageActionTest.cs" />
<Compile Include="Messaging\NotificationMessageTest.cs" />
<Compile Include="Messaging\PropertyChangedMessageTest.cs" />
<Compile Include="NotifyPropertyChangedTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Threading\TestDispatcherHelper.cs" />
<Compile Include="ViewModel\TestClassWithNotifyPropertyChanged.cs" />
<Compile Include="Threading\DispatcherHelperTest.cs" />
<Compile Include="ViewModelBaseTest.cs" />
<Compile Include="ViewModel\TestViewModel.cs" />
<Compile Include="ViewModel\TestViewModelInlinePropertyChanged.cs" />
@ -87,6 +90,7 @@
<Name>GalaSoft.MvvmLight.Extras %28NET35%29</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

Просмотреть файл

@ -0,0 +1,115 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GalaSoft.MvvmLight.Test.Stubs;
using GalaSoft.MvvmLight.Test.ViewModel;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace GalaSoft.MvvmLight.Test
{
[TestClass]
public class NotifyPropertyChangedTest
{
[TestMethod]
public void TestPropertyChangeNoBroadcast()
{
var receivedDateTimeLocal = DateTime.MinValue;
var vm = new TestClassWithNotifyPropertyChanged();
vm.PropertyChanged += (s, e) =>
{
if (e.PropertyName == TestClassWithNotifyPropertyChanged.LastChangedPropertyName)
{
receivedDateTimeLocal = vm.LastChanged;
}
};
var now = DateTime.Now;
vm.LastChanged = now;
Assert.AreEqual(now, vm.LastChanged);
Assert.AreEqual(now, receivedDateTimeLocal);
}
[TestMethod]
public void TestPropertyChangeNoMagicString()
{
var receivedDateTimeLocal = DateTime.MinValue;
var vm = new TestClassWithNotifyPropertyChanged();
vm.PropertyChanged += (s, e) =>
{
if (e.PropertyName == "LastChangedNoMagicString")
{
receivedDateTimeLocal = vm.LastChangedNoMagicString;
}
};
var now = DateTime.Now;
vm.LastChangedNoMagicString = now;
Assert.AreEqual(now, vm.LastChangedNoMagicString);
Assert.AreEqual(now, receivedDateTimeLocal);
}
[TestMethod]
public void TestPropertyChangedSendInline()
{
var receivedDateTimeLocal = DateTime.MinValue;
var vm = new TestClassWithNotifyPropertyChanged();
vm.PropertyChanged += (s, e) =>
{
if (e.PropertyName == "LastChangedInline")
{
receivedDateTimeLocal = vm.LastChangedInline;
}
};
var now = DateTime.Now;
vm.LastChangedInline = now;
Assert.AreEqual(now, vm.LastChangedInline);
Assert.AreEqual(now, receivedDateTimeLocal);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public void TestPropertyChangedSendInlineOutOfSetter()
{
var vm = new TestClassWithNotifyPropertyChanged();
vm.RaisePropertyChangedInlineOutOfPropertySetter();
}
[TestMethod]
#if DEBUG
[ExpectedException(typeof(ArgumentException))]
#endif
public void TestRaiseValidInvalidPropertyName()
{
var vm = new TestClassWithNotifyPropertyChanged();
var receivedPropertyChanged = false;
var invalidPropertyNameReceived = false;
vm.PropertyChanged += (s, e) =>
{
if (e.PropertyName == TestClassWithNotifyPropertyChanged.LastChangedPropertyName)
{
receivedPropertyChanged = true;
}
else
{
invalidPropertyNameReceived = true;
}
};
vm.RaisePropertyChangedPublic(TestClassWithNotifyPropertyChanged.LastChangedPropertyName);
Assert.IsTrue(receivedPropertyChanged);
Assert.IsFalse(invalidPropertyNameReceived);
vm.RaisePropertyChangedPublic(TestClassWithNotifyPropertyChanged.LastChangedPropertyName + "1");
Assert.IsTrue(invalidPropertyNameReceived);
}
}
}

Просмотреть файл

@ -0,0 +1,97 @@
using System;
namespace GalaSoft.MvvmLight.Test.Stubs
{
public class TestClassWithNotifyPropertyChanged : NotifyPropertyChanged
{
/// <summary>
/// The <see cref="LastChanged" /> property's name.
/// </summary>
public const string LastChangedPropertyName = "LastChanged";
private DateTime _lastChanged = DateTime.MinValue;
/// <summary>
/// Gets the LastChanged property.
/// Changes to that property's value raise the PropertyChanged event.
/// </summary>
public DateTime LastChanged
{
get
{
return _lastChanged;
}
set
{
if (_lastChanged == value)
{
return;
}
_lastChanged = value;
RaisePropertyChanged(LastChangedPropertyName);
}
}
private DateTime _lastChangedNoMagicString = DateTime.MinValue;
/// <summary>
/// Gets the LastChangedNoMagicString property.
/// Changes to that property's value raise the PropertyChanged event.
/// </summary>
public DateTime LastChangedNoMagicString
{
get
{
return _lastChangedNoMagicString;
}
set
{
if (_lastChangedNoMagicString == value)
{
return;
}
_lastChangedNoMagicString = value;
RaisePropertyChanged(() => LastChangedNoMagicString);
}
}
private DateTime _lastChangedInline = DateTime.MinValue;
/// <summary>
/// Gets the LastChangedInline property.
/// Changes to that property's value raise the PropertyChanged event.
/// </summary>
public DateTime LastChangedInline
{
get
{
return _lastChangedInline;
}
set
{
if (_lastChangedInline == value)
{
return;
}
_lastChangedInline = value;
RaisePropertyChanged();
}
}
public void RaisePropertyChangedInlineOutOfPropertySetter()
{
RaisePropertyChanged();
}
public void RaisePropertyChangedPublic(string propertyName)
{
RaisePropertyChanged(propertyName);
}
}
}

Просмотреть файл

@ -7,34 +7,9 @@ using GalaSoft.MvvmLight.Helpers;
namespace GalaSoft.MvvmLight.Test
{
/// <summary>
/// Summary description for ViewModelBaseTest
/// </summary>
[TestClass]
public class ViewModelBaseTest
{
[TestMethod]
public void TestDispose()
{
Messenger.Reset();
var vm = new TestViewModel();
Messenger.Default.Register<string>(vm, vm.HandleStringMessage);
const string Content1 = "Hello world";
const string Content2 = "Another message";
Messenger.Default.Send(Content1);
Assert.AreEqual(Content1, vm.ReceivedContent);
vm.Dispose();
Messenger.Default.Send(Content2);
Assert.AreEqual(Content1, vm.ReceivedContent);
}
[TestMethod]
public void TestCleanup()
{

Просмотреть файл

@ -101,12 +101,18 @@
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\Messaging\PropertyChangedMessageTest.cs">
<Link>Messaging\PropertyChangedMessageTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\Threading\TestDispatcherHelper.cs">
<Link>Threading\TestDispatcherHelper.cs</Link>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\NotifyPropertyChangedTest.cs">
<Link>NotifyPropertyChangedTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\Threading\DispatcherHelperTest.cs">
<Link>Threading\DispatcherHelperTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\ViewModelBaseTest.cs">
<Link>ViewModelBaseTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\ViewModel\TestClassWithNotifyPropertyChanged.cs">
<Link>ViewModel\TestClassWithNotifyPropertyChanged.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\ViewModel\TestViewModel.cs">
<Link>ViewModel\TestViewModel.cs</Link>
</Compile>
@ -134,6 +140,7 @@
<ItemGroup>
<WCFMetadata Include="Service References\" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

Просмотреть файл

@ -99,9 +99,18 @@
<Reference Include="System.Windows.Browser" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\NotifyPropertyChangedTest.cs">
<Link>NotifyPropertyChangedTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\Properties\AssemblyInfo.cs">
<Link>Properties\AssemblyInfo.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\Threading\DispatcherHelperTest.cs">
<Link>Threading\DispatcherHelperTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\ViewModel\TestClassWithNotifyPropertyChanged.cs">
<Link>ViewModels\TestClassWithNotifyPropertyChanged.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\ViewModel\TestViewModel.cs">
<Link>ViewModels\TestViewModel.cs</Link>
</Compile>
@ -159,9 +168,6 @@
<Compile Include="..\GalaSoft.MvvmLight.Test (NET35)\Messaging\PropertyChangedMessageTest.cs">
<Link>Messaging\PropertyChangedMessageTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test (NET35)\Threading\TestDispatcherHelper.cs">
<Link>Threading\TestDispatcherHelper.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test (NET35)\ViewModelBaseTest.cs">
<Link>ViewModelBaseTest.cs</Link>
</Compile>

Просмотреть файл

@ -137,15 +137,22 @@
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\Messaging\PropertyChangedMessageTest.cs">
<Link>Messaging\PropertyChangedMessageTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\NotifyPropertyChangedTest.cs">
<Link>NotifyPropertyChangedTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\Properties\AssemblyInfo.cs">
<Link>Properties\AssemblyInfo.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\Threading\TestDispatcherHelper.cs">
<Link>Threading\TestDispatcherHelper.cs</Link>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\Threading\DispatcherHelperTest.cs">
<Link>Threading\DispatcherHelperTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\ViewModelBaseTest.cs">
<Link>ViewModelBaseTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\ViewModel\TestClassWithNotifyPropertyChanged.cs">
<Link>ViewModels\TestClassWithNotifyPropertyChanged.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\ViewModel\TestViewModel.cs">
<Link>ViewModels\TestViewModel.cs</Link>
</Compile>

Просмотреть файл

@ -112,12 +112,18 @@
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\Messaging\PropertyChangedMessageTest.cs">
<Link>Messaging\PropertyChangedMessageTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\Threading\TestDispatcherHelper.cs">
<Link>Threading\TestDispatcherHelper.cs</Link>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\NotifyPropertyChangedTest.cs">
<Link>NotifyPropertyChangedTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\Threading\DispatcherHelperTest.cs">
<Link>Threading\DispatcherHelperTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\ViewModelBaseTest.cs">
<Link>ViewModelBaseTest.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\ViewModel\TestClassWithNotifyPropertyChanged.cs">
<Link>ViewModel\TestClassWithNotifyPropertyChanged.cs</Link>
</Compile>
<Compile Include="..\GalaSoft.MvvmLight.Test %28NET35%29\ViewModel\TestViewModel.cs">
<Link>ViewModel\TestViewModel.cs</Link>
</Compile>

Просмотреть файл

@ -72,8 +72,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SL4", "SL4", "{E3327395-6DB
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Test (SL4)", "GalaSoft.MvvmLight.Test (SL4)\GalaSoft.MvvmLight.Test (SL4).csproj", "{540219BD-EBEA-4956-AAF7-CA1A87B1D177}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GalaSoft.MvvmLight.Test (WP7)", "GalaSoft.MvvmLight.Test (WP7)\GalaSoft.MvvmLight.Test (WP7).csproj", "{594E864D-76B9-45B6-B2C6-AEE511673777}"
EndProject
Global
GlobalSection(TestCaseManagementSettings) = postSolution
CategoryFile = GalaSoft.MvvmLight1.vsmdi
@ -131,12 +129,6 @@ Global
{540219BD-EBEA-4956-AAF7-CA1A87B1D177}.Debug|Any CPU.Build.0 = Debug|Any CPU
{540219BD-EBEA-4956-AAF7-CA1A87B1D177}.Release|Any CPU.ActiveCfg = Release|Any CPU
{540219BD-EBEA-4956-AAF7-CA1A87B1D177}.Release|Any CPU.Build.0 = Release|Any CPU
{594E864D-76B9-45B6-B2C6-AEE511673777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{594E864D-76B9-45B6-B2C6-AEE511673777}.Debug|Any CPU.Build.0 = Debug|Any CPU
{594E864D-76B9-45B6-B2C6-AEE511673777}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{594E864D-76B9-45B6-B2C6-AEE511673777}.Release|Any CPU.ActiveCfg = Release|Any CPU
{594E864D-76B9-45B6-B2C6-AEE511673777}.Release|Any CPU.Build.0 = Release|Any CPU
{594E864D-76B9-45B6-B2C6-AEE511673777}.Release|Any CPU.Deploy.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

Просмотреть файл

@ -0,0 +1,98 @@
rem @echo off
echo Installing MVVM Light binaries
if exist _Binaries rd /s /q _Binaries
md _Binaries
md _Binaries\Debug
md _Binaries\Debug\Silverlight3
md _Binaries\Debug\Silverlight4
md _Binaries\Debug\WP7
md _Binaries\Debug\WPF4
md _Binaries\Debug\WPF35SP1
md _Binaries\Release
md _Binaries\Release\Silverlight3
md _Binaries\Release\Silverlight4
md _Binaries\Release\WP7
md _Binaries\Release\WPF4
md _Binaries\Release\WPF35SP1
if exist ".\GalaSoft.MvvmLight (NET4)\bin\Debug\GalaSoft.MvvmLight.WPF4.dll" copy ".\GalaSoft.MvvmLight (NET4)\bin\Debug\GalaSoft.MvvmLight.WPF4.dll" .\_Binaries\Debug\WPF4\GalaSoft.MvvmLight.WPF4.dll
if exist ".\GalaSoft.MvvmLight (NET4)\bin\Debug\GalaSoft.MvvmLight.WPF4.pdb" copy ".\GalaSoft.MvvmLight (NET4)\bin\Debug\GalaSoft.MvvmLight.WPF4.pdb" .\_Binaries\Debug\WPF4\GalaSoft.MvvmLight.WPF4.pdb
if exist ".\GalaSoft.MvvmLight (NET4)\bin\Debug\GalaSoft.MvvmLight.WPF4.xml" copy ".\GalaSoft.MvvmLight (NET4)\bin\Debug\GalaSoft.MvvmLight.WPF4.xml" .\_Binaries\Debug\WPF4\GalaSoft.MvvmLight.WPF4.xml
if exist ".\GalaSoft.MvvmLight (NET4)\bin\Release\GalaSoft.MvvmLight.WPF4.dll" copy ".\GalaSoft.MvvmLight (NET4)\bin\Release\GalaSoft.MvvmLight.WPF4.dll" .\_Binaries\Release\WPF4\GalaSoft.MvvmLight.WPF4.dll
if exist ".\GalaSoft.MvvmLight (NET4)\bin\Release\GalaSoft.MvvmLight.WPF4.pdb" copy ".\GalaSoft.MvvmLight (NET4)\bin\Release\GalaSoft.MvvmLight.WPF4.pdb" .\_Binaries\Release\WPF4\GalaSoft.MvvmLight.WPF4.pdb
if exist ".\GalaSoft.MvvmLight (NET4)\bin\Release\GalaSoft.MvvmLight.WPF4.xml" copy ".\GalaSoft.MvvmLight (NET4)\bin\Release\GalaSoft.MvvmLight.WPF4.xml" .\_Binaries\Release\WPF4\GalaSoft.MvvmLight.WPF4.xml
if exist ".\GalaSoft.MvvmLight (NET35)\bin\Debug\GalaSoft.MvvmLight.dll" copy ".\GalaSoft.MvvmLight (NET35)\bin\Debug\GalaSoft.MvvmLight.dll" .\_Binaries\Debug\WPF35SP1\GalaSoft.MvvmLight.dll
if exist ".\GalaSoft.MvvmLight (NET35)\bin\Debug\GalaSoft.MvvmLight.pdb" copy ".\GalaSoft.MvvmLight (NET35)\bin\Debug\GalaSoft.MvvmLight.pdb" .\_Binaries\Debug\WPF35SP1\GalaSoft.MvvmLight.pdb
if exist ".\GalaSoft.MvvmLight (NET35)\bin\Debug\GalaSoft.MvvmLight.xml" copy ".\GalaSoft.MvvmLight (NET35)\bin\Debug\GalaSoft.MvvmLight.xml" .\_Binaries\Debug\WPF35SP1\GalaSoft.MvvmLight.xml
if exist ".\GalaSoft.MvvmLight (NET35)\bin\Release\GalaSoft.MvvmLight.dll" copy ".\GalaSoft.MvvmLight (NET35)\bin\Release\GalaSoft.MvvmLight.dll" .\_Binaries\Release\WPF35SP1\GalaSoft.MvvmLight.dll
if exist ".\GalaSoft.MvvmLight (NET35)\bin\Release\GalaSoft.MvvmLight.pdb" copy ".\GalaSoft.MvvmLight (NET35)\bin\Release\GalaSoft.MvvmLight.pdb" .\_Binaries\Release\WPF35SP1\GalaSoft.MvvmLight.pdb
if exist ".\GalaSoft.MvvmLight (NET35)\bin\Release\GalaSoft.MvvmLight.xml" copy ".\GalaSoft.MvvmLight (NET35)\bin\Release\GalaSoft.MvvmLight.xml" .\_Binaries\Release\WPF35SP1\GalaSoft.MvvmLight.xml
if exist ".\GalaSoft.MvvmLight (SL3)\bin\Debug\GalaSoft.MvvmLight.dll" copy ".\GalaSoft.MvvmLight (SL3)\bin\Debug\GalaSoft.MvvmLight.dll" .\_Binaries\Debug\Silverlight3\GalaSoft.MvvmLight.dll
if exist ".\GalaSoft.MvvmLight (SL3)\bin\Debug\GalaSoft.MvvmLight.pdb" copy ".\GalaSoft.MvvmLight (SL3)\bin\Debug\GalaSoft.MvvmLight.pdb" .\_Binaries\Debug\Silverlight3\GalaSoft.MvvmLight.pdb
if exist ".\GalaSoft.MvvmLight (SL3)\bin\Debug\GalaSoft.MvvmLight.xml" copy ".\GalaSoft.MvvmLight (SL3)\bin\Debug\GalaSoft.MvvmLight.xml" .\_Binaries\Debug\Silverlight3\GalaSoft.MvvmLight.xml
if exist ".\GalaSoft.MvvmLight (SL3)\bin\Release\GalaSoft.MvvmLight.dll" copy ".\GalaSoft.MvvmLight (SL3)\bin\Release\GalaSoft.MvvmLight.dll" .\_Binaries\Release\Silverlight3\GalaSoft.MvvmLight.dll
if exist ".\GalaSoft.MvvmLight (SL3)\bin\Release\GalaSoft.MvvmLight.pdb" copy ".\GalaSoft.MvvmLight (SL3)\bin\Release\GalaSoft.MvvmLight.pdb" .\_Binaries\Release\Silverlight3\GalaSoft.MvvmLight.pdb
if exist ".\GalaSoft.MvvmLight (SL3)\bin\Release\GalaSoft.MvvmLight.xml" copy ".\GalaSoft.MvvmLight (SL3)\bin\Release\GalaSoft.MvvmLight.xml" .\_Binaries\Release\Silverlight3\GalaSoft.MvvmLight.xml
if exist ".\GalaSoft.MvvmLight (SL4)\bin\Debug\GalaSoft.MvvmLight.SL4.dll" copy ".\GalaSoft.MvvmLight (SL4)\bin\Debug\GalaSoft.MvvmLight.SL4.dll" .\_Binaries\Debug\Silverlight4\GalaSoft.MvvmLight.SL4.dll
if exist ".\GalaSoft.MvvmLight (SL4)\bin\Debug\GalaSoft.MvvmLight.SL4.pdb" copy ".\GalaSoft.MvvmLight (SL4)\bin\Debug\GalaSoft.MvvmLight.SL4.pdb" .\_Binaries\Debug\Silverlight4\GalaSoft.MvvmLight.SL4.pdb
if exist ".\GalaSoft.MvvmLight (SL4)\bin\Debug\GalaSoft.MvvmLight.SL4.xml" copy ".\GalaSoft.MvvmLight (SL4)\bin\Debug\GalaSoft.MvvmLight.SL4.xml" .\_Binaries\Debug\Silverlight4\GalaSoft.MvvmLight.SL4.xml
if exist ".\GalaSoft.MvvmLight (SL4)\bin\Release\GalaSoft.MvvmLight.SL4.dll" copy ".\GalaSoft.MvvmLight (SL4)\bin\Release\GalaSoft.MvvmLight.SL4.dll" .\_Binaries\Release\Silverlight4\GalaSoft.MvvmLight.SL4.dll
if exist ".\GalaSoft.MvvmLight (SL4)\bin\Release\GalaSoft.MvvmLight.SL4.pdb" copy ".\GalaSoft.MvvmLight (SL4)\bin\Release\GalaSoft.MvvmLight.SL4.pdb" .\_Binaries\Release\Silverlight4\GalaSoft.MvvmLight.SL4.pdb
if exist ".\GalaSoft.MvvmLight (SL4)\bin\Release\GalaSoft.MvvmLight.SL4.xml" copy ".\GalaSoft.MvvmLight (SL4)\bin\Release\GalaSoft.MvvmLight.SL4.xml" .\_Binaries\Release\Silverlight4\GalaSoft.MvvmLight.SL4.xml
if exist ".\GalaSoft.MvvmLight (WP7)\bin\Debug\GalaSoft.MvvmLight.WP7.dll" copy ".\GalaSoft.MvvmLight (WP7)\bin\Debug\GalaSoft.MvvmLight.WP7.dll" .\_Binaries\Debug\WP7\GalaSoft.MvvmLight.WP7.dll
if exist ".\GalaSoft.MvvmLight (WP7)\bin\Debug\GalaSoft.MvvmLight.WP7.pdb" copy ".\GalaSoft.MvvmLight (WP7)\bin\Debug\GalaSoft.MvvmLight.WP7.pdb" .\_Binaries\Debug\WP7\GalaSoft.MvvmLight.WP7.pdb
if exist ".\GalaSoft.MvvmLight (WP7)\bin\Debug\GalaSoft.MvvmLight.WP7.xml" copy ".\GalaSoft.MvvmLight (WP7)\bin\Debug\GalaSoft.MvvmLight.WP7.xml" .\_Binaries\Debug\WP7\GalaSoft.MvvmLight.WP7.xml
if exist ".\GalaSoft.MvvmLight (WP7)\bin\Release\GalaSoft.MvvmLight.WP7.dll" copy ".\GalaSoft.MvvmLight (WP7)\bin\Release\GalaSoft.MvvmLight.WP7.dll" .\_Binaries\Release\WP7\GalaSoft.MvvmLight.WP7.dll
if exist ".\GalaSoft.MvvmLight (WP7)\bin\Release\GalaSoft.MvvmLight.WP7.pdb" copy ".\GalaSoft.MvvmLight (WP7)\bin\Release\GalaSoft.MvvmLight.WP7.pdb" .\_Binaries\Release\WP7\GalaSoft.MvvmLight.WP7.pdb
if exist ".\GalaSoft.MvvmLight (WP7)\bin\Release\GalaSoft.MvvmLight.WP7.xml" copy ".\GalaSoft.MvvmLight (WP7)\bin\Release\GalaSoft.MvvmLight.WP7.xml" .\_Binaries\Release\WP7\GalaSoft.MvvmLight.WP7.xml
if exist ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Debug\GalaSoft.MvvmLight.Extras.WPF4.dll" copy ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Debug\GalaSoft.MvvmLight.Extras.WPF4.dll" .\_Binaries\Debug\WPF4\GalaSoft.MvvmLight.Extras.WPF4.dll
if exist ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Debug\GalaSoft.MvvmLight.Extras.WPF4.pdb" copy ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Debug\GalaSoft.MvvmLight.Extras.WPF4.pdb" .\_Binaries\Debug\WPF4\GalaSoft.MvvmLight.Extras.WPF4.pdb
if exist ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Debug\GalaSoft.MvvmLight.Extras.WPF4.xml" copy ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Debug\GalaSoft.MvvmLight.Extras.WPF4.xml" .\_Binaries\Debug\WPF4\GalaSoft.MvvmLight.Extras.WPF4.xml
if exist ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Debug\System.Windows.Interactivity.dll" copy ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Debug\System.Windows.Interactivity.dll" .\_Binaries\Debug\WPF4\System.Windows.Interactivity.dll
if exist ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Release\GalaSoft.MvvmLight.Extras.WPF4.dll" copy ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Release\GalaSoft.MvvmLight.Extras.WPF4.dll" .\_Binaries\Release\WPF4\GalaSoft.MvvmLight.Extras.WPF4.dll
if exist ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Release\GalaSoft.MvvmLight.Extras.WPF4.pdb" copy ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Release\GalaSoft.MvvmLight.Extras.WPF4.pdb" .\_Binaries\Release\WPF4\GalaSoft.MvvmLight.Extras.WPF4.pdb
if exist ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Release\GalaSoft.MvvmLight.Extras.WPF4.xml" copy ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Release\GalaSoft.MvvmLight.Extras.WPF4.xml" .\_Binaries\Release\WPF4\GalaSoft.MvvmLight.Extras.WPF4.xml
if exist ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Release\System.Windows.Interactivity.dll" copy ".\GalaSoft.MvvmLight.Extras (NET4)\bin\Release\System.Windows.Interactivity.dll" .\_Binaries\Release\WPF4\System.Windows.Interactivity.dll
if exist ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Debug\GalaSoft.MvvmLight.Extras.dll" copy ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Debug\GalaSoft.MvvmLight.Extras.dll" .\_Binaries\Debug\WPF35SP1\GalaSoft.MvvmLight.Extras.dll
if exist ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Debug\GalaSoft.MvvmLight.Extras.pdb" copy ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Debug\GalaSoft.MvvmLight.Extras.pdb" .\_Binaries\Debug\WPF35SP1\GalaSoft.MvvmLight.Extras.pdb
if exist ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Debug\GalaSoft.MvvmLight.Extras.xml" copy ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Debug\GalaSoft.MvvmLight.Extras.xml" .\_Binaries\Debug\WPF35SP1\GalaSoft.MvvmLight.Extras.xml
if exist ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Debug\System.Windows.Interactivity.dll" copy ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Debug\System.Windows.Interactivity.dll" .\_Binaries\Debug\WPF35SP1\System.Windows.Interactivity.dll
if exist ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Release\GalaSoft.MvvmLight.Extras.dll" copy ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Release\GalaSoft.MvvmLight.Extras.dll" .\_Binaries\Release\WPF35SP1\GalaSoft.MvvmLight.Extras.dll
if exist ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Release\GalaSoft.MvvmLight.Extras.pdb" copy ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Release\GalaSoft.MvvmLight.Extras.pdb" .\_Binaries\Release\WPF35SP1\GalaSoft.MvvmLight.Extras.pdb
if exist ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Release\GalaSoft.MvvmLight.Extras.xml" copy ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Release\GalaSoft.MvvmLight.Extras.xml" .\_Binaries\Release\WPF35SP1\GalaSoft.MvvmLight.Extras.xml
if exist ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Release\System.Windows.Interactivity.dll" copy ".\GalaSoft.MvvmLight.Extras (NET35)\bin\Release\System.Windows.Interactivity.dll" .\_Binaries\Release\WPF35SP1\System.Windows.Interactivity.dll
if exist ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Debug\GalaSoft.MvvmLight.Extras.dll" copy ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Debug\GalaSoft.MvvmLight.Extras.dll" .\_Binaries\Debug\Silverlight3\GalaSoft.MvvmLight.Extras.dll
if exist ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Debug\GalaSoft.MvvmLight.Extras.pdb" copy ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Debug\GalaSoft.MvvmLight.Extras.pdb" .\_Binaries\Debug\Silverlight3\GalaSoft.MvvmLight.Extras.pdb
if exist ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Debug\GalaSoft.MvvmLight.Extras.xml" copy ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Debug\GalaSoft.MvvmLight.Extras.xml" .\_Binaries\Debug\Silverlight3\GalaSoft.MvvmLight.Extras.xml
if exist ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Debug\System.Windows.Interactivity.dll" copy ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Debug\System.Windows.Interactivity.dll" .\_Binaries\Debug\Silverlight3\System.Windows.Interactivity.dll
if exist ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Release\GalaSoft.MvvmLight.Extras.dll" copy ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Release\GalaSoft.MvvmLight.Extras.dll" .\_Binaries\Release\Silverlight3\GalaSoft.MvvmLight.Extras.dll
if exist ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Release\GalaSoft.MvvmLight.Extras.pdb" copy ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Release\GalaSoft.MvvmLight.Extras.pdb" .\_Binaries\Release\Silverlight3\GalaSoft.MvvmLight.Extras.pdb
if exist ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Release\GalaSoft.MvvmLight.Extras.xml" copy ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Release\GalaSoft.MvvmLight.Extras.xml" .\_Binaries\Release\Silverlight3\GalaSoft.MvvmLight.Extras.xml
if exist ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Release\System.Windows.Interactivity.dll" copy ".\GalaSoft.MvvmLight.Extras (SL3)\bin\Release\System.Windows.Interactivity.dll" .\_Binaries\Release\Silverlight3\System.Windows.Interactivity.dll
if exist ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Debug\GalaSoft.MvvmLight.Extras.SL4.dll" copy ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Debug\GalaSoft.MvvmLight.Extras.SL4.dll" .\_Binaries\Debug\Silverlight4\GalaSoft.MvvmLight.Extras.SL4.dll
if exist ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Debug\GalaSoft.MvvmLight.Extras.SL4.pdb" copy ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Debug\GalaSoft.MvvmLight.Extras.SL4.pdb" .\_Binaries\Debug\Silverlight4\GalaSoft.MvvmLight.Extras.SL4.pdb
if exist ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Debug\GalaSoft.MvvmLight.Extras.SL4.xml" copy ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Debug\GalaSoft.MvvmLight.Extras.SL4.xml" .\_Binaries\Debug\Silverlight4\GalaSoft.MvvmLight.Extras.SL4.xml
if exist ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Debug\System.Windows.Interactivity.dll" copy ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Debug\System.Windows.Interactivity.dll" .\_Binaries\Debug\Silverlight4\System.Windows.Interactivity.dll
if exist ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Release\GalaSoft.MvvmLight.Extras.SL4.dll" copy ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Release\GalaSoft.MvvmLight.Extras.SL4.dll" .\_Binaries\Release\Silverlight4\GalaSoft.MvvmLight.Extras.SL4.dll
if exist ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Release\GalaSoft.MvvmLight.Extras.SL4.pdb" copy ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Release\GalaSoft.MvvmLight.Extras.SL4.pdb" .\_Binaries\Release\Silverlight4\GalaSoft.MvvmLight.Extras.SL4.pdb
if exist ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Release\GalaSoft.MvvmLight.Extras.SL4.xml" copy ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Release\GalaSoft.MvvmLight.Extras.SL4.xml" .\_Binaries\Release\Silverlight4\GalaSoft.MvvmLight.Extras.SL4.xml
if exist ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Release\System.Windows.Interactivity.dll" copy ".\GalaSoft.MvvmLight.Extras (SL4)\bin\Release\System.Windows.Interactivity.dll" .\_Binaries\Release\Silverlight4\System.Windows.Interactivity.dll
if exist ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Debug\GalaSoft.MvvmLight.Extras.WP7.dll" copy ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Debug\GalaSoft.MvvmLight.Extras.WP7.dll" .\_Binaries\Debug\WP7\GalaSoft.MvvmLight.Extras.WP7.dll
if exist ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Debug\GalaSoft.MvvmLight.Extras.WP7.pdb" copy ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Debug\GalaSoft.MvvmLight.Extras.WP7.pdb" .\_Binaries\Debug\WP7\GalaSoft.MvvmLight.Extras.WP7.pdb
if exist ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Debug\GalaSoft.MvvmLight.Extras.WP7.xml" copy ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Debug\GalaSoft.MvvmLight.Extras.WP7.xml" .\_Binaries\Debug\WP7\GalaSoft.MvvmLight.Extras.WP7.xml
if exist ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Debug\System.Windows.Interactivity.dll" copy ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Debug\System.Windows.Interactivity.dll" .\_Binaries\Debug\WP7\System.Windows.Interactivity.dll
if exist ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Release\GalaSoft.MvvmLight.Extras.WP7.dll" copy ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Release\GalaSoft.MvvmLight.Extras.WP7.dll" .\_Binaries\Release\WP7\GalaSoft.MvvmLight.Extras.WP7.dll
if exist ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Release\GalaSoft.MvvmLight.Extras.WP7.pdb" copy ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Release\GalaSoft.MvvmLight.Extras.WP7.pdb" .\_Binaries\Release\WP7\GalaSoft.MvvmLight.Extras.WP7.pdb
if exist ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Release\GalaSoft.MvvmLight.Extras.WP7.xml" copy ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Release\GalaSoft.MvvmLight.Extras.WP7.xml" .\_Binaries\Release\WP7\GalaSoft.MvvmLight.Extras.WP7.xml
if exist ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Release\System.Windows.Interactivity.dll" copy ".\GalaSoft.MvvmLight.Extras (WP7)\bin\Release\System.Windows.Interactivity.dll" .\_Binaries\Release\WP7\System.Windows.Interactivity.dll