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(); }
然後一切都工作正常。
這有點令人不滿意,因爲我喜歡在所有頁面上保持命令事件的相同方法,這是不同的。但在被這種行爲困擾了這麼久之後,我很高興終於找到了一些可行的東西。
但我仍然想知道爲什麼?
不,我怕沒有工作。 – ajaxer
但是在環顧四周後,我同意,這與線程有關。只是我想了解爲什麼。 – ajaxer