2014-11-08 15 views
0

標題幾乎總結了它。我一直試圖使用按鈕的CommandParameter,但我不知道它應該是什麼,以及我需要在ViewModel類中添加哪些代碼。任何幫助,將不勝感激。如何將當前選定的ListView對象項返回到ViewModel的按鈕單擊

XAML:

<ItemsControl> 
    <StackPanel Orientation="Horizontal"> 
     <Button Command="{Binding ButtonClick}" Width="150" Margin="5" Height="22" HorizontalAlignment="Left">Click</Button> 
    </StackPanel> 
    <ListView Name="listView" Grid.Row="1" BorderThickness="0" ItemsSource="{Binding myObjects}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Space ID" DisplayMemberBinding="{Binding ID}" Width="Auto" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</ItemsControl> 

視圖模型C#:

public ICommand ButtonClick 
    { 
     get { return new DelegateCommand(BtnClick); } 
    } 

    private void BtnClick() 
    { 
     //Access selected object of type myObject here. 
    } 

DelegateCommand類:

public class DelegateCommand : ICommand 
{ 
    private readonly Action _action; 

    public DelegateCommand(Action action) 
    { 
     _action = action; 
    } 

    public void Execute(object parameter) 
    { 
     _action(); 
    } 

    public bool CanExecute(object parameter) 
    { 
     return true; 
    } 
} 

回答

0

我解決了這個問題,做了一些改變。首先,我的Delegate ICommand類不支持這種行爲,所以我將它修改爲列出的here。然後我更新了我的XAML和ViewModel。

更新XAML:

<StackPanel Orientation="Horizontal"> 
    <Button Command="{Binding Command1}" CommandParameter="{Binding ElementName=listView}" Width="150" Margin="5" Height="22" HorizontalAlignment="Left">Button1</Button> 
</StackPanel> 
<ListView Name="listView" ItemsSource="{Binding myObjects}"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="ID" DisplayMemberBinding="{Binding ID}" Width="Auto" /> 
     </GridView> 
    </ListView.View> 
</ListView> 

更新視圖模型:

public ICommand Command1 { get; set; } 

public MainWindowViewModel() 
{ 
    this.Command1 = new DelegateCommand(ExecuteCommand1, CanExecuteCommand1); 
} 

    public bool CanExecuteCommand1(object parameter) 
    { 
     return true; 
    } 

    private void ExecuteCommand1(object parameter) 
    { 
     ListView listView = parameter as ListView; 

     foreach (MyObject myObject in listView.SelectedItems) 
     { 
      // Do stuff. 
     } 
    } 
1

可以ListView的的SelectedItem綁定到你的視圖模型的屬性。就像你使用ItemsSource綁定'myObjects'一樣。

相關問題