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));
}
은 내가 매개 변수를 업데이트하기 위해 별도의 동작을 사용했다.
무엇이 잘못되면 저를 교정하십시오.
'MyCollection'의 실제 유형은 무엇입니까? (ICommand에 대해 알고 싶습니다.) – Dennis
@Dennis :'MyCollection'은 ObservableCollection입니다. –
아, 알겠습니다. 당신은'Convert.ToBoolean'에'MyCollection.Count'를 인수로 전달하려고합니다. 나는 두려워, 불가능하다. (나는 완전히 확신하지 못한다.) IMO, converter /'ICommand'는 여기로가는 길입니다. 참고로, 게시 한 링크의 샘플은 트릭을 사용합니다. 메소드 매개 변수를 다른 컨트롤에 바인딩합니다.이 컨트롤은 값을 변경할 수 있습니다. – Dennis