2013-07-06 94 views
0

我正在使用WPF,我試圖遵循MVVM。 所以我有一個虛擬機,它有我的模型作爲屬性。 Model有一個屬性,它是一個model1的列表,它實現了一個命令。 爲什麼我不想將命令移動到ViewModel,所以我可以訪問視圖的原因是我不知道我的列表中有多少元素,我想確保我的命令訪問它的MODEL1。 這個命令也做了一些處理,並且我希望在這個處理過程中,窗口保存綁定到該命令的按鈕來隱藏。 我該如何做到這一點?我應該在哪裏看?如何隱藏使用WPF中的命令發送命令的窗口?

回答

1

在這種情況下,最好是您的ViewModel具有該命令並需要一個參數。這樣,你會傳遞用戶試圖修改的項目。所以,如果你有一個ItemsControl

<ItemsControl ItemsSource="{Binding MyItems}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Button Content="{Binding Name, StringFormat=Push {0}}" 
        Command="{Binding DataContext.ItemPushedCommand, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" 
        CommandParameter="{Binding}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

在您的視圖模型,你需要定義你的命令,像這樣(我使用的是DelegateCommand從prism,你可以使用任何命令你是舒服):

private readonly DelegateCommand<Model> itemPushedCommand; 

public ICommand ItemPushedCommand { get { return itemPushedCommand; } } 

public MyViewModel() 
{ 
    itemPushedCommand = new DelegateCommand<Model>(OnItemPushed); 
} 

private void OnItemPushed(Model item) 
{ 
    // your item has been pushed! 
} 
+0

和內部OnItemPushed我可以調用項目的例程。謝謝你的回答,這是我一直在尋找的。 – Andrei