WPF: конвертировать целое число в bool, используя ObjectDataProvider
В моем приложении WPF у меня есть кнопка Сохранить, которую нужно включить, когда количество коллекций превышает 0.
Я пытаюсь конвертировать с помощью ObjectDataProvider, который будет использовать Convert.ToBoolean(int value)
, (Я могу использовать конвертер, но почему бы не попробовать узнать что-то другое сегодня.)
Так я и сделал, как показано ниже, но это не работает.
<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}}">
Что мне не хватает?
2 ответа
На основании ссылки, предоставленной Prjaval и вами, я пишу это как ответ.
<Button IsEnabled="{Binding MyCollection.Count, Source={StaticResource Convert}}">
В вашем коде вы обращаетесь к MyCollection.Count из объекта Boolean, так что это приведет к ошибкам связывания и не будет работать.
мы можем выполнить ваши требования, обновив параметр метода ObjectDataProvider через другой источник и используя источник в другой привязке. Это означает, что мы не можем присвоить methodparameter и использовать 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));
}
я использовал отдельное поведение, чтобы обновить параметр.
Пожалуйста, поправьте меня, если что-то не так.
Я проверил ObjectDataProvider и до сих пор, я получил это.
Он динамически создает объект для привязки.
Итак, я думаю, что проблема здесь.
"{Binding MyCollection.Count, Source={StaticResource Convert}}"
Вам нужно привязать только источник, и MyCollection.Count
должен попасть в Convert
,
Проверьте это руководство от DevCurry.