2013-03-25 4 views
8

단추의 명령을 작업에 바인딩 한 후 진행 이벤트를 노출하는 개체를 호출합니다.선언적 진행률 표시 줄 바인딩

event System.EventHandler<ProgressChangedEventArgs> ProgressChanged 

나는 최선의 방법으로 내 XAML에 그것을 표시하고 싶습니다. 난 그냥 속성을 업데이트 할 작업을 수행하기 위해 호출하고 어디


한 가지 방법은

member x.Iteration with get()  = _iteration 
        and set(v:int) = _iteration <- v 
            x.NotifyPropertyChanged <@[email protected]> 

member x.IterationVisible with get()  = _iterationVisible 
          and set(v:bool) = _iterationVisible <- v 
              x.NotifyPropertyChanged <@[email protected]> 

다음 내 VM에서 두 바인딩 필드를 노출 할 수 있습니다

member x.CompleteInference(algorithm:IGeneratedAlgorithm) = 
    x.IterationVisible <- true 
    algorithm.ProgressChanged.Add(fun args -> x.Iteration <- args.Iteration) 
    algorithm.run() 
    x.IterationVisible <- false 

그러면 두 가지 질문이 생깁니다 :

012 WPF에 의해 처리 될 수
  • 중간체 Iteration 속성 거치지 않고 progressChanged 이벤트를 노출 F 번호에 직접적인 방법 있는가 3,? 그것은 우리가 얻을 수있는 가장 선언적인 것입니까/우리는 항상 어떤 상태를 어딘가에 저장해야합니까?

  • 이 상태 시스템 바인딩을 수행하는 자연스러운 방법이 있습니까? XAML?

  • 답변

    1

    제 지식에는 xaml에서 이벤트를 처리 할 방법이 없으므로 이벤트 변경 사항을 속성을 통해 노출시키는 것이 아마도 당신이 할 수있는 최선의 방법 일 것입니다.

    xaml에서 "상태 시스템 바인딩"을 얻으려면 진행률을 크기로 표시 한 다음 진행률 막대의 너비를 해당 속성에 바인딩 할 수 있습니다. 이에 대한 예는 here을 참조하십시오.

    1

    저는 F #을 처음 사용하기는하지만이 작업을 올바르게 수행하고 있습니다.

    Wpf는 일반적으로 MVVM 패턴과 함께 사용되므로 버튼을 명령 속성에 연결하고 진행률 표시 줄을 int 속성에 연결하는 것이 정확합니다. 그런 다음 명령은 진행 값이 변경되도록하고 바인딩이 나머지를 처리하도록합니다.

    xaml의 이벤트 처리에는 코드 숨김이 필요합니다. UI를 향상시키는 역할 만하는 경우에는 개인적으로 신경 쓰지 않아도됩니다. 그것은 분명히 다른 객체와 상호 작용해서는 안됩니다. 이벤트 처리기가 없다는 의미입니다.

    이렇게하면 제어 이벤트를 명령에 바인딩하는 데 사용할 수있는 명령 동작에 이벤트가 유입됩니다. msdn을 참조하십시오.

    희망이 어떤 식 으로든 도움이됩니다.