2016-12-19 16 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のメソッドパラメータを更新し、異なるバインディングでソースを使用します。つまり、メソッドパラメータを割り当てることができず、同じバインディングでSourceを使用することはできません。

私はこのようにしようと、完璧に働いた、

<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)); 

    } 

iは、パラメータを更新するために、別々の行動を使用していました。

何か問題があれば、私に修正してください。

+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

関連する問題