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は、パラメータを更新するために、別々の行動を使用していました。
何か問題があれば、私に修正してください。
「MyCollection」の実際のタイプは何ですか? (私はあなたが 'ICommand'について知っていればいいと思う)。 – Dennis
@Dennis: 'MyCollection'は' ObservableCollection'です。 –
ああ、そうです。引数として 'Convert.ToBoolean'に' MyCollection.Count'を渡したいとします。私は恐れますが、それは不可能です(しかし、私は完全にはわかりません)。 IMO、converter/'ICommand'はここに行く方法です。注:あなたが投稿したリンクのサンプルは、トリックを使用します。メソッドパラメータを別のコントロールにバインドします。 – Dennis