Найдите свой SDK здесь. Скопируйте и вставьте его в путь расположения SDK. C: \ Users \ YourUserName \ AppData \ Local \ Android \ Sdk
не забудьте установить флажок Показать скрытые папки внутри вашей папки в меню Control Control.
Возможно, вы заинтересуетесь этим обсуждением о
«Наилучшие практики: как правильно реализовать INotifyPropertyChanged?»
тоже.
Еще один ОЧЕНЬ КРАСИВЫЙ метод, о котором я могу подумать, это
Автоматическая реализация INotifyPropertyChanged with Aspect
AOP: Аспектно-ориентированное программирование
Хорошая статья о codeproject: AOP Реализация AOP INotifyPropertyChanged
Если вы можете отменить то, что вы сделали, сделайте это (например, переместите файл назад). РЕДАКТИРОВАТЬ: В случае, когда вы перемещаете файлы, и вы внесли изменения в эти файлы, это (по сути) ваш единственный вариант!
В противном случае вам придется выполнить возврат, чтобы отменить внесенные вами изменения в репозиторий, а затем используйте команды Tortoise.
В качестве примечания, если вы используете Visual Studio, я считаю, что Ankhsvn - действительно хороший способ не «забыть» сделать это. subversion way - перемещение, переименование и удаление - все с помощью команд svn.
m еще не делает - я намерен добавить код, который проверяет наличие отладочных сборок, что имя свойства для предоставленного объекта PropertChangedEventArgs совпадает со свойством, в котором он используется - на данный момент с помощью этого кода разработчик все еще может предоставить неправильный объект.Проверьте это:
public class Observable<T> : INotifyPropertyChanged
where T : Observable<T>
{
public event PropertyChangedEventHandler PropertyChanged;
protected static PropertyChangedEventArgs CreateArgs(
Expression<Func<T, object>> propertyExpression)
{
var lambda = propertyExpression as LambdaExpression;
MemberExpression memberExpression;
if (lambda.Body is UnaryExpression)
{
var unaryExpression = lambda.Body as UnaryExpression;
memberExpression = unaryExpression.Operand as MemberExpression;
}
else
{
memberExpression = lambda.Body as MemberExpression;
}
var propertyInfo = memberExpression.Member as PropertyInfo;
return new PropertyChangedEventArgs(propertyInfo.Name);
}
protected void NotifyChange(PropertyChangedEventArgs args)
{
if (PropertyChanged != null)
{
PropertyChanged(this, args);
}
}
}
public class Person : Observable<Person>
{
// property change event arg objects
static PropertyChangedEventArgs _firstNameChangeArgs = CreateArgs(x => x.FirstName);
static PropertyChangedEventArgs _lastNameChangeArgs = CreateArgs(x => x.LastName);
string _firstName;
string _lastName;
public string FirstName
{
get { return _firstName; }
set
{
_firstName = value;
NotifyChange(_firstNameChangeArgs);
}
}
public string LastName
{
get { return _lastName; }
set
{
_lastName = value;
NotifyChange(_lastNameChangeArgs);
}
}
}
Взгляните на это сообщение в блоге: http://khason.net/dev/inotifypropertychanged-auto-wiring-or-how-to-get-rid-of-redundant-code