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.

Другие вопросы по тегам