2

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

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

这是我的尝试:

对象数据提供者声明:

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

组合框声明:

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

如您所见,组合框的 Tag 属性绑定到父级数据上下文的 Name 属性。我想将该 Name 属性传递给对象数据提供者。我不确定在向对象数据提供者请求数据时如何将数据传递给它。

请指教。

谢谢。

4

2 回答 2

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; }
于 2012-09-27T15:00:24.553 回答
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}"/>
于 2012-09-27T03:04:26.957 回答