我想从对象数据提供程序填充combobox控件项。对象数据提供程序调用我的自定义类上的一个方法来获取项目列表。
但是,我的自定义类上的方法需要一个参数,然后才能返回项目列表。我不知道该怎么做。
这是我的尝试:
对象数据提供程序声明:
<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属性传递给对象数据提供程序。我不确定如何在向对象数据提供程序请求数据时将数据传递给对象数据提供程序。
请给我建议。
谢谢。
发布于 2012-09-27 11:04:27
有一些绑定到方法参数以调整其值的示例,但这在这里并不真正适用……
面对这个挑战,为什么不让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}"/>发布于 2012-09-27 23:00:25
在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>在您的视图模型中,如下所示
public RelayCommand<string> UserComboBoxSelectionCmd { get; set; }https://stackoverflow.com/questions/12612085
复制相似问题