通过传入方法参数,通过objectdataprovider组合Combobox ItemsSource

时间:2012-09-26 23:44:25

标签: wpf binding objectdataprovider method-parameters

我想从对象数据提供程序填充组合框控件项。对象数据提供程序在我的自定义类上调用一个方法来获取项目列表。

然而,我的自定义类上的方法需要一个参数才能返回项目列表。我不知道该怎么做。

这是我的尝试:

对象数据提供者声明:

<ObjectDataProvider x:Key="dataFromEnum" ObjectType="{x:Type ns:MyDataProvider}" MethodName="GetData">
            <ObjectDataProvider.MethodParameters>
                <sys:String>String.Empty</sys:String>
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>

ComboBox声明:

<ComboBox Name="combobox" ItemsSource="{StaticResource dataFromEnum}" Tag="{Binding Path=Name}" />

因此,您可以看到组合框的Tag属性绑定到父级数据上下文的Name属性。我想将该Name属性传递给对象数据提供程序。我不确定如何在从中请求数据时将数据传递到对象数据提供程序。

请告知。

感谢。

2 个答案:

答案 0 :(得分:0)

有一些绑定方法参数的例子可以调整它们的值,但这在这里并不适用......

面对这一挑战,为什么不让ViewModel公开一个属性来绑定到用于组合控件的ItemsSource?

我经常会有这样的事情:

public MySomething SelectedSomething { get; set; }
public IEnumerable<MySomething> AvailableSomethings
{
  get { /* Access a factory method or something to return applicable list for this view model state */ }
}

然后绑定变为:

<ComboBox ItemsSource="{Binding path=AvailableSomethings}" SelectedItem="{Binding path=SelectedSomething}"/>

答案 1 :(得分:0)

在wpf中你必须生成选择更改的事件 因为你必须提供参考

clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity

 <ComboBox ItemsSource="{Binding UserSectionItems, Mode=TwoWay}" Margin="104,11,0,10" HorizontalAlignment="Left" Width="135" Name="UserCmd" >
            <l:Interaction.Triggers>
                <l:EventTrigger EventName="SelectionChanged">
                    <l:InvokeCommandAction Command="{Binding UserComboBoxSelectionCmd, Mode=TwoWay}" CommandParameter="{Binding ElementName=UserCmd,Path=SelectedItem}"/>
                </l:EventTrigger>
            </l:Interaction.Triggers>
        </ComboBox>
您的Viewmodel中的

看起来像

public RelayCommand<string> UserComboBoxSelectionCmd { get; set; }