2012-05-19 92 views
1

我的問題是爲什麼我在使用交互觸發器時看到一些意外行爲,而不是在使用普通的單擊事件時看到一些意外行爲。交互觸發器不允許屬性將事件更改爲觸發

在我的WP7應用程序中,我有一個帶有三個透視項的透視控件。 在第一個樞軸項目上有一個按鈕,它執行某些操作,然後需要設置當前的樞軸項目以顯示最後一個。 我在其他工具中使用MVVM和Prism。

觀是這樣的:

<controls:Pivot Name="myPivot" SelectedIndex="{Binding Path=PivotIndex, Mode=TwoWay}"> 
    <controls:PivotItem Header="first"> 
    <Button Content="Search"> 
     <i:Interaction.Triggers> 
     <i:EventTrigger EventName="Click"> 
      <i:InvokeCommandAction Command="{Binding myViewModel.SearchCommand, Source={StaticResource ViewModelLocator}}"/> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
    </Button> 
    </controls:PivotItem> 
    <controls:PivotItem Header="second"></controls:PivotItem> 
    <controls:PivotItem Header="third"></controls:PivotItem> 
</controls:Pivot> 

而且視圖模型是這樣的:

public class myViewModel : NotificationObject 
{ 
    private int mPivotIndex; 
    public int PivotIndex 
    { 
     get { return mPivotIndex; } 
     set 
     { 
      mPivotIndex = value; 
      RaisePropertyChanged(() => this.PivotIndex); 
     } 
    } 
    public DelegateCommand SearchCommand { get; set; } 
    public myViewModel() 
    { 
     this.SearchCommand = new DelegateCommand(() => OnSearch()); 
    } 

    public void OnSearch() 
    { 
     //do something 
     this.PivotIndex = 2;    
    } 
} 

所有這工作正常,樞轉顯示器,按鈕觸發事件和OnSearch()方法是所謂的,財產的價值已經改變。

但是,透視顯示不會更改爲顯示名爲「第三」的透視項目。

我擺弄行之有年,並最終發現,如果我刪除了互動觸發,改變了查看這個:

<Button Content="Search" Click="Search_Click" /> 

並由此增加的代碼背後:

private void Search_Click(object sender, System.Windows.RoutedEventArgs e) 
{ ((myViewModel)this.DataContext).OnSearch(); } 

然後一切都工作正常。

這有點令人不滿意,因爲我喜歡在所有頁面上保持命令事件的相同方法,這是不同的。但在被這種行爲困擾了這麼久之後,我很高興終於找到了一些可行的東西。

但我仍然想知道爲什麼?

回答

0

不知道,但是這可能是一些涉及到線程...嘗試以下,看看是否能解決問題:

public void OnSearch() 
{ 
    Dispatcher.BeginInvoke(() => { 
     this.PivotIndex = 2; 
    }); 
} 
+0

不,我怕沒有工作。 – ajaxer

+0

但是在環顧四周後,我同意,這與線程有關。只是我想了解爲什麼。 – ajaxer