WPF:使用ObjectDataProvider将整数转换为bool

时间:2016-12-19 06:23:54

标签: c# wpf converter ivalueconverter objectdataprovider

在我的WPF应用程序中,我有一个Save按钮,需要在收集计数大于0时启用。

我正在尝试使用将使用Convert.ToBoolean(int value)的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}}">

我缺少什么?

2 个答案:

答案 0 :(得分:1)

根据Prjaval和你提供的链接,我正在写这个作为答案。

<Button IsEnabled="{Binding MyCollection.Count, Source={StaticResource Convert}}">

在您的代码中,您正在从对象布尔值访问MyCollection.Count,因此它将给出绑定错误并且无法正常工作。

我们可以通过不同的源更新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));

    }

我使用单独的行为来更新参数。

如果出现任何问题,请纠正我。

答案 1 :(得分:0)

我检查了ObjectDataProvider,到目前为止,我得到了这个。

  

它动态创建一个要绑定的对象。

所以,我认为问题出在这里。

"{Binding MyCollection.Count, Source={StaticResource Convert}}"

您只需要绑定来源,而MyCollection.Count应该被Convert加入。

DevCurry查看本教程。