我想从对象数据提供程序填充组合框控件项。对象数据提供程序在我的自定义类上调用一个方法来获取项目列表。
然而,我的自定义类上的方法需要一个参数才能返回项目列表。我不知道该怎么做。
这是我的尝试:
对象数据提供者声明:
<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属性传递给对象数据提供程序。我不确定如何在从中请求数据时将数据传递到对象数据提供程序。
请告知。
感谢。
答案 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; }