2013-07-02 29 views
0

我是WPF,MVVM的新手,這是我在stackoverflow中的第一個問題。 我會解決我的問題,然後我會繼續告訴我迄今爲止發現的情況。爲列表框內的複選框命令和命令參數WPF/MVVM綁定不同的源

在視圖中,我有一個列表框綁定到一個列表說ProjectList具有ProjectId,Name,Description和IsFavourite(bool)。在項目模板中,我給了一個複選框。

一旦複選框被選中,我應該執行一個正常工作的命令,直到這裏。但問題是我必須發送ProjectId作爲命令參數。我在這裏失敗。

我已經嘗試從此鏈接使用datacontextspy。 Different Datacontext for Command and CommandParameter

這裏我能夠獲得Viewmodel的datacontext,而不是其複選框被選中的項目的ProjectId。

這是我的.xaml代碼。

<ListBox Name="lstProjects" ItemsSource="{Binding ProjectList}" HorizontalAlignment="Stretch" SelectedItem="{Binding SelectedProject}"> 
    <ListBox.Resources> 
     <local:DataContextSpy x:Key="spy"/> 
    </ListBox.Resources> 
    <TextBlock Grid.Column="1" Grid.Row="1" Grid.RowSpan="3" 
    Text="{Binding ProjectDescription}" FontSize="10" TextWrapping="Wrap" /> 

    <CheckBox Name="chkFavourites" Grid.Column="1" Grid.Row="1" Content="Favoutires"             
CommandParameter="{Binding Path= DataContext,Source={StaticResource spy}}" 
Command="{Binding Path=IsSelected}" DataContext="{Binding DataContext, 
RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}}"> 
</CheckBox> 
</ListBox> 

可以幫我解決這個問題。如果我錯過了任何細節,請告訴我。

由於提前, 普拉香特

+2

你的代碼是否正確?你將ListBox上的ItemsSource與在其中聲明的顯式項綁定在一起?其次,你的DataContextSpy類有「DataContent」屬性嗎?如果沒有,您的CommandParameter不能按預期工作。 –

回答

0

調查XAML和數據綁定一個很好的工具是史努比。 http://snoopwpf.codeplex.com/

查看你的代碼,你應該爲你的ListBox定義一個DataTemplate,它包含你的TextBlock和CheckBox。然後,您可以使用ListBox上的ItemTemplate屬性並將其設置爲您的數據模板。這樣每個ListBoxItem將有一個類型爲Project的DataContext。

<DataTemplate x:Key="ProjectTemplate"> 
<TextBlock...../> 
<CheckBox....../> 
</DataTemplate> 

<ListBox ItemTemplate="{StaticResource ProjectTemplate}" ...... /> 

因此,要將CommandParameter綁定到你的項目(如專案編號)的屬性(當你有項目對接洽談的收藏在你的列表框),我認爲這是你需要的XAML。

CommandParameter="{Binding Path=DataContext.ProjectID, 
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBoxItem}" 
相關問題