2014-01-06 72 views
0

我有MainWindow和DataDetails用戶控件。 DataDetails顯示內部主窗口在窗口的右側,使用XAMLMainWindow和UserControl,用戶控件上的事件處理

<Views:DataDetails /> 

主窗口被渲染和DataDetails都使用的ViewModels,我要離開代碼隱藏完好。所以我使用命令進行事件處理,但是我遇到了這種方法的問題。點擊主窗口事件是否工作正常,在DataDetails同樣的方法不能正常工作,這裏的代碼

MainWindow.xaml

... 
<Button Name="btnSearch" 
     Command="{Binding SearchByCommand, Mode=OneWay}"> Search </Button> 

MainWindowViewModel.cs

public ICommand SearchByCommand 
{ 
    get 
    { 
     if (_SearchByCommand == null) 
     { 
      _SearchByCommand = new RelayCommand(
       x => this.LoadData(this.SearchBy), 
       x => { return !string.IsNullOrEmpty(this.SearchText); } 
     ); 
     } 
     return _SearchByCommand; 
    } 
} 

LoadData方法不這裏顯示的是爲了減少代碼量,再次運行inisde MainWindow。

Inside MainWindow.xaml我已經添加了DataDetails用戶控件<Views:DataDetails />,在窗口標籤元素裏面添加了這個名稱空間,所以這個用戶控件在MainWindow中正確顯示。在DataDetails中,我有按鈕單擊事件連接到命令SaveDataCommand並在DataDetailsViewModel內命令自己。

DataDetails.xaml

<Button Name="btnSave" 
      Command="{Binding SaveDataCommand, Mode=OneWay}"> Save data</Button> 

DataDetailsViewModel

public ICommand SaveDataCommand 
{ 
    get 
    { 
     _SaveDataCommand = new RelayCommand(
      x=>this.SaveData(), null); 
      return _SaveDataCommand; 
    }    
} 

再次這裏未示出此方法(保存數據),以減少的代碼量。在調試此SaveDataCommand從不被擊中,在按鈕上單擊沒有任何事情發生。我在這裏錯過了什麼?

+0

你在哪裏設置DataDetails DataContext爲DataDetailsViewModel? DataDetailsViewModel是MainWindowViewModel的一個屬性嗎? – Fayilt

回答

1

你如何建立應該綁定到你的嵌套用戶控件的虛擬機?在視圖的構造函數中?有很多方法可以做到這一點的轉換,一個我經常使用的是揭露了「詳細信息視圖模式」作爲主虛擬機的屬性,然後設置適當的數據上下文:

<Views:DataDetails DataContext={Binding DataDetails} /> 

而且那麼你的主虛擬機有一個屬性:

public DataDetailsViewModel DataDetails { get { return _dataDetailsViewModel; } } 

當然,也有很多爲您詳細介紹查看您可以建立數據上下文不同的方式,以上只是衆多選項之一。

相關問題