2016-12-19 7 views
1

를 사용하여 bool로 정수 변환, 나는 컬렉션 카운트가 내가 Convert.ToBoolean(int value)를 사용하는 ObjectDataProvider를 사용하여 변환하는 것을 시도하고 0보다 큰WPF : 내 WPF 응용 프로그램에서 ObjectDataProvider

때 활성화 될 필요가있는 저장 버튼을 . (나는 변환기를 사용할 수 있지만, 오늘 다른 것을 배우려고 노력하지 않겠는가.)

그래서 나는 다음과 같이했으나 작동하지 않는다.

<ObjectDataProvider x:Key="Convert" 
        ObjectType="{x:Type sys:Convert}" 
        MethodName="ToBoolean"> 
    <ObjectDataProvider.MethodParameters> 
     <sys:Int32>0</sys:Int32> 
    </ObjectDataProvider.MethodParameters> 
</ObjectDataProvider> 

<Button IsEnabled="{Binding MyCollection.Count, Source={StaticResource Convert}}"> 

내가 무엇이 누락 되었습니까?

+0

'MyCollection'의 실제 유형은 무엇입니까? (ICommand에 대해 알고 싶습니다.) – Dennis

+0

@Dennis :'MyCollection'은 ObservableCollection입니다. –

+0

아, 알겠습니다. 당신은'Convert.ToBoolean'에'MyCollection.Count'를 인수로 전달하려고합니다. 나는 두려워, 불가능하다. (나는 완전히 확신하지 못한다.) IMO, converter /'ICommand'는 여기로가는 길입니다. 참고로, 게시 한 링크의 샘플은 트릭을 사용합니다. 메소드 매개 변수를 다른 컨트롤에 바인딩합니다.이 컨트롤은 값을 변경할 수 있습니다. – Dennis

답변

1

Prjaval과 귀하가 제공하는 링크를 기반으로 답변으로 작성합니다. 이 바인딩 오류를 줄 것이다 작동하지 않습니다 귀하의 코드에서

<Button IsEnabled="{Binding MyCollection.Count, Source={StaticResource Convert}}"> 

, 당신은 객체 부울에서, MyCollection.Count에 액세스.

다른 소스를 통해 ObjectDataProvider의 메소드 매개 변수를 업데이트하고 다른 바인딩의 소스를 사용하여 요구 사항을 충족시킬 수 있습니다. 즉, 메소드 매개 변수를 할당하고 동일한 바인딩에서 소스를 사용할 수 없습니다.

이 같은 노력하고 완벽하게 작동,

<Grid> 
       <Grid.Resources> 
       <ObjectDataProvider x:Key="convert" 
            MethodName="ToBoolean" 
            ObjectType="{x:Type sys:Convert}"> 
        <ObjectDataProvider.MethodParameters> 
         <sys:Int32>0</sys:Int32> 
        </ObjectDataProvider.MethodParameters> 
       </ObjectDataProvider> 
      </Grid.Resources> 
      <Grid.RowDefinitions> 
       <RowDefinition/> 
       <RowDefinition Height="Auto"/> 
      </Grid.RowDefinitions> 
      <!--Updating Parameter--> 
      <ItemsControl ItemsSource="{Binding Groups}"> 
       <i:Interaction.Behaviors> 
        <local:ObjectDataUpdate> 
         <local:ObjectDataUpdate.Count> 
          <Binding BindsDirectlyToSource="True" 
             Mode="OneWayToSource" 
             Path="MethodParameters[0]" 
             Source="{StaticResource convert}" /> 
         </local:ObjectDataUpdate.Count> 
        </local:ObjectDataUpdate> 
       </i:Interaction.Behaviors> 
      </ItemsControl> 
      <!--Using ObjectDataProvider--> 
      <Button Height="40" Grid.Row="1" IsEnabled="{Binding Source={StaticResource convert}}" /> 
     </Grid> 

행동

public class ObjectDataUpdate : Behavior<ItemsControl> 
    { 
     protected override void OnAttached() 
     { 
      base.OnAttached(); 
      AssociatedObject.Loaded += (_, __) => 
      { 
       //Some logics to update Count. I'm setting directly for sample purpose 
       Count = AssociatedObject.Items.Count; 
      }; 
     } 

     public int Count 
     { 
      get { return (int)GetValue(CountProperty); } 
      set { SetValue(CountProperty, value); } 
     } 

     // Using a DependencyProperty as the backing store for Count. This enables animation, styling, binding, etc... 
     public static readonly DependencyProperty CountProperty = 
      DependencyProperty.Register("Count", typeof(int), typeof(ObjectDataUpdate), new PropertyMetadata(0)); 

    } 

은 내가 매개 변수를 업데이트하기 위해 별도의 동작을 사용했다.

무엇이 잘못되면 저를 교정하십시오.

+0

'OnDetaching' 메쏘드에서'AssociatedObject.Loaded' 이벤트로부터 이벤트 핸들러를 푸는 것을 기억해야합니다 –

0

나는 ObjectDataProvider을 확인했다. 지금까지 나는 이것을 얻었다.

동적으로 바인딩 할 개체를 만듭니다.

그래서 여기에 문제가 있다고 생각합니다.

"{Binding MyCollection.Count, Source={StaticResource Convert}}" 

당신은 단지 소스를 결합해야하고, MyCollection.CountConvert에 도착해야합니다.

DevCurry에서이 자습서를 확인하십시오.

+0

당신은 http://www.shujaat.net/2011/02/wpf-binding-method-parameters-of.html –

+0

에 명시된 바와 같이 메소드를 전달하고 바인딩 할 수 있습니다. 또한'path ='를 사용하여 시도해 보았습니다. 무엇이 오류입니까? 너 점점? – Prajwal