2011-09-05 22 views
0

我想實現一個簡單的事情,或者我認爲這是簡單,但我不知道是否有可能因...綁定不同的性質使用觸發器

想象以下場景......在ViewModel我有一個名爲SelectedProduct的屬性,另一個名爲NewProduct(兩者都是相同類型的模型)。

在我的MainWindow中,我們有一個ListView和兩個按鈕,一個是添加按鈕,另一個是更新按鈕(並且這個將更新ListView中的Selected Item),兩者都會打開同一個窗口,但會做不同的事情。

我在按鈕中使用命令,所以我認爲我可以使用一個命令,如果點擊了主窗口的添加按鈕或使用其他命令。

因此,如果我們點擊添加按鈕,第二個窗口中的控件(TextBoxes和ComboBoxes)將綁定NewProduct屬性,如果我們單擊更新按鈕,第二個窗口將綁定SelectedProduct屬性。

有什麼辦法可以達到這個目的嗎?

在此先感謝

回答

2

爲什麼你不只是創建一個單一的EditedProduct屬性,並給予適當的價值?

0

兩種方法,我可以看到,這將對於這種情況的工作將是爲你指出,將每個呼叫的Window不同使用兩個不同的命令。

第一個選項是創建任兩個構造爲Window(一個用於添加,而另一個用於更新),或者只是創建一個經過在一個枚舉值作爲它的參數。

public void Window2(DisplayMode mode)

DisplayModeenum有兩個值(AddUpdate

public void Window2() // The default 'Add' window 
{ 
} 

public void Window2(ModelObject instance) // The 'Update' window 
{ 
} 

第二個選項將是使構造爲Window私人,並在該類上創建靜態方法以創建t的一個實例他窗口並顯示給用戶。

這可以用於像

Window2.UpdateItem(selectedItem)

隨着每種方法設置的DataContext的窗口實例的對象,你就想編輯(或對象的新實例,或到實例這是傳遞給構造函數)

0

看看下面的視圖模型。

您可以創建一個新屬性,該屬性將綁定到您的視圖,並且您可以根據您的按鈕命令更改屬性引用。

在下面的代碼我已經創建了一個編輯屬性(綁定到視圖),我已經分配了新品推薦給它的添加按鈕命令執行和分配SelectedProduct同時更新..

class Viewmodel : ViewModelBase 
    { 

     private void AddCommandExecute(object o) 
     { 
      // your logic 
      EditedProduct = NewProduct; 
     } 

     private void UpdateCommandExecute(object o) 
     { 
      // your logic 
      EditedProduct = SelectedProduct; 
     } 


     private Product _selectedProduct; 

     public Product SelectedProduct 
     { 
      get { return _selectedProduct; } 
      set 
      { 
       _selectedProduct = value; 
       OnPropertyChanged("SelectedProduct"); 
      } 
     } 

     private Product _newProduct; 

     public Product NewProduct 
     { 
      get { return _newProduct; } 
      set 
      { 
       _newProduct = value; 
       OnPropertyChanged("NewProduct"); 
      } 
     } 

     private Product _editedProduct; 

     public Product EditedProduct 
     { 
      get { return _editedProduct; } 
      set 
      { 
       _editedProduct = value; 
       OnPropertyChanged("EditedProduct"); 
      } 
     } 

    }