2012-09-26 47 views
2

我想從對象數據提供程序中填充組合框控件項。對象數據提供程序在我的自定義類上調用方法以獲取項目列表。Combobox ItemsSource通過objectdataprovider傳入方法參數

但是,我的自定義類上的方法在返回項目列表之前需要一個參數。我不知道該怎麼做。

這裏是我的嘗試:

對象數據提供商聲明:

<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}" /> 

因此,大家可以看到組合框的標籤屬性綁定到名稱父級數據上下文的屬性。我想將該Name屬性傳遞給對象數據提供者。我不知道如何將數據傳遞給對象數據提供者,同時向它請求數據。

請指教。

謝謝。

回答

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}"/> 
+0

嗯,我不認爲我可以那樣做。此組合框正在網格控件內部呈現。網格控件本身綁定到IEnumerable。所以會有多行,每行都會有一個組合框。取決於類型,每個組合框可能必須呈現一組不同的選項。這就是複雜性。我無法像描述的那樣在我的視圖模型中定義一個屬性,因爲組合框是在網格中每行生成的。我不知道有多少行(所以有多少個組合框)。 – user1647697

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; } 
+0

請看我上面的評論。我的評論也適用於您的解決方案。我不能像你所描述的那樣去做。 – user1647697

相關問題