2016-10-02 4 views
-1

Есть ли библиотека, которая реализует MVCM ViewModel в стиле Knockout JS.WPF C# ViewModel с вычисленными свойствами и отслеживанием зависимостей. Аналог Knockut JS

Таким образом, он должен поддерживать Computed Properties с автоматическим Dependency Tracking.

ли не Finde что-то бесшовное для уведомления и проверок вместе (как я вижу это).

Или, пожалуйста, дайте мне совет, как сделать этот материал в настоящее время.

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


Некоторые примеры того, что я имел в виду.

public partial class MyViewModel : ValidatableViewModel 

// Некоторая собственность с валидатором.

public Double? LoanAmount 
    { 
     get { return _innerDataObject.LoanAmount; } 
     set 
     { 
      _innerDataObject.LoanAmount = value; 

      // Validators with dependency tracking. 
      PropertyChangedInSetter(new ValidatableContext("LoanAmount") 
       { 
        FuncValidators = new List<Func<ValidationResult>> 
         { 
          () => 
          { 
           if (LoanParametersEnabled == false) 
            return null; 

           if (LoanParametersUnrequired 
            && LoanAmount.HasValue == false) 
            return null; 

           if (LoanAmount.HasValue == false) 
            return new ValidationResult(ErrorMessages.RequiredValue); 

           // ... 
          } 
         }, 

       } 
      ); 
     } 
    } 

// Некоторое обиженное имущество.

public Double? LimitLoanProductCalculated 
    { 
     get 
     { 
      // dependency tracking for a computed property. 
      var res = GetComputedResult(() => GetSomeThingsForUi(
       LimitLoanProductMax, 
       CardVariantOrNull, 
       LimitGlobalCalculated 
       )); 

      return res; 
     } 
    } 
+0

Как некоторые идеи http://www.codemag.com/article/0907101 и http://updatecontrols.net/cs/ – it3xl

+1

Почему это было приостановлено? – John

+0

А, я бы хотел знать. Это было приостановлено не один раз только в первый день. Надеюсь, это были ребята, которые быстро ищут репутацию, и это не моя вина. Но все может быть)) Теперь я действительно боюсь задавать любые вопросы по StackOverflow, чтобы предотвратить уничтожение моей небольшой репутации, ха-ха. – it3xl

ответ

0

Я использовал PropertyChanged.Fody уже много лет. Он работает с автоматическими свойствами, а также с вычисленными свойствами.

+0

Хм. Раньше я только знал о PostSharp. Что делать, если мне нужно отслеживание зависимостей от валидаторов? Как я вижу, мне нужно написать свой собственный плагин Fody для этого, и это будет очень грязно и дорого для команды. Или я что-то пропустил? В любом случае, благодарю Вас! Никогда не слышал. – it3xl

+1

Hah! _ «Я использовал ... годами», теперь я вижу. Вы [первый участник Fody] (https://github.com/orgs/Fody/people). Это не мой путь, абсолютно)) Системный кодер никогда не рыть так глубоко, где разработчик программы выкопал. Это шутка, конечно, Кэмерон. – it3xl

+0

@ IlyaTretyakovit3xl :) Fody как PostSharp, это система компиляции. Я написал другие плагины, но PropertyChanged был написан Саймоном Кроппом. –

2

Я написал Moldinium, которая делает отслеживание зависимостей Нокаут-стиля для .NET.

Из ридми:

Moldinium позволяет определять классы, как это:

public abstract class Course : IModel 
{ 
    public abstract String Name { get; set; } 

    public abstract Room Location { get; set; } 

    public virtual String Description 
     => $"course {Name} in room {Location.Name}"; 
} 

public abstract class Room : IModel 
{ 
    public abstract String Name { get; set; } 
} 

И вы получите следующее без какого-либо дополнительного кода:

  • Реализация INotifyPropertyChanged для всех свойств объявлен абстрактным или виртуальным.
  • Недвижимость Course.Description будет автоматически обновляться при замене на Course.Location или Course.Location.Name.
Смежные вопросы