Привязка данных ПОСТЕПЕННО свойства

Красота в одной строке

ls | cat -n | while read n f; do mv "$f" "$n.extension"; done 

изменить расширение с помощью нужного PNG, Jpg или некоторого другого.

17
задан Kent Boogaart 18 April 2009 в 18:36
поделиться

5 ответов

Я написал Ферму , чтобы заполнить пустоту.

10
ответ дан 30 November 2019 в 14:06
поделиться

Я не знаю ни о каком библиотека , который делает это - но Вы могли записать свое собственное довольно легко.

Вот основание, которое я поднял за несколько минут, который устанавливает два пути привязка данных между двумя простыми свойствами:

public static class Binder
{

    public static void Bind(
        INotifyPropertyChanged source,
        string sourcePropertyName,
        INotifyPropertyChanged target,
        string targetPropertyName)
    {
        var sourceProperty
            = source.GetType().GetProperty(sourcePropertyName);
        var targetProperty
            = target.GetType().GetProperty(targetPropertyName);

        source.PropertyChanged +=
            (s, a) =>
            {
                var sourceValue = sourceProperty.GetValue(source, null);
                var targetValue = targetProperty.GetValue(target, null);
                if (!Object.Equals(sourceValue, targetValue))
                {
                    targetProperty.SetValue(target, sourceValue, null);
                }
            };

        target.PropertyChanged +=
            (s, a) =>
            {
                var sourceValue = sourceProperty.GetValue(source, null);
                var targetValue = targetProperty.GetValue(target, null);
                if (!Object.Equals(sourceValue, targetValue))
                {
                    sourceProperty.SetValue(source, targetValue, null);
                }
            };
    }
}

, Конечно, этот код испытывает недостаток в нескольких тонкостях. Вещи добавить включают

  • Проверка, которые source и target присвоены
  • Проверка, что свойства, определенные sourcePropertyName и targetPropertyName, существуют
  • Проверка соответствие типов между этими двумя свойствами

кроме того, Отражение является относительно медленным (хотя сравнительный тест это прежде, чем отбросить его, он не , что медленный), таким образом, Вы могли бы хотеть использовать скомпилированные выражения вместо этого.

Наконец, учитывая, что определение свойств строкой подвержено ошибкам, Вы могли использовать выражения Linq и дополнительные методы вместо этого. Тогда вместо того, чтобы писать

Binder.Bind( source, "Name", target, "Name")

Вы могли записать

source.Bind( Name => target.Name);
7
ответ дан 30 November 2019 в 14:06
поделиться

AutoMapper может скопировать значения между двумя экземплярами, но необходимо написать собственный код, чтобы заставить это произойти автоматически.

1
ответ дан 30 November 2019 в 14:06
поделиться

Возможно Связываемый LINQ или непрерывный linq может помочь здесь. При попытке добавить свойства модели, которые являются на самом деле "полученными свойствами" Ваших фактических, обновляющих данных, для помощи Вам UI для привязки с, эти две платформы должны помочь.

1
ответ дан 30 November 2019 в 14:06
поделиться

Если бы Вы определили свои свойства как DependencyProperty, то Вы могли бы сделать это. И WF и WPF имеют реализацию его (первая ссылка для WPF. Для WF это этот один), таким образом, необходимо решить, чтобы использовать - но оба должны быть достаточными для потребностей.

-2
ответ дан 30 November 2019 в 14:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: