我有一個支付期限列表,我已經綁定到一個ComboBox,我想通過點擊按鈕(即一組Previous按鈕)。根據選定的支付期限,我想填充數據庫中的時間記錄列表。使用按鈕更改綁定的WPF組合框SelectedItem
C#代碼
public TimeSheetViewModel()
{
BuildPayPeriods();
GetEmployeeList();
GetTimes(SelectedEmployee, SelectedPayPeriod);
NextPayPeriod = new RelayCommand(NextPayPeriodCommand);
PrevPayPeriod = new RelayCommand(PrevPayPeriodCommand);
SelectedPayPeriodChanged = new RelayCommand(SelectPayPeriodCommand);
}
public ObservableCollection<PayPeriod> PayPeriods { get; set; }
private PayPeriod _SelectedPayPeriod;
public PayPeriod SelectedPayPeriod
{
get
{
return _SelectedPayPeriod;
}
set
{
_SelectedPayPeriod = value;
GetTimes(SelectedEmployee, value);
OnPropertyChanged("SelectedPayPeriod")
}
}
public RelayCommand NextPayPeriod { get; set; }
void NextPayPeriodCommand(object parameter)
{
int index = PayPeriods.IndexOf((PayPeriod)parameter);
\\EDIT
if (index != 0 && CheckForEdits())
{
SelectedPayPeriod = PayPeriods[index - 1];
}
}
public RelayCommand PrevPayPeriod { get; set; }
void PrevPayPeriodCommand(Object parameter)
{
int index = PayPeriods.IndexOf((PayPeriod)parameter);
\\EDIT
if (index != (PayPeriods.Count - 1) && CheckForEdits())
{
SelectedPayPeriod = PayPeriods[index + 1];
}
}
public RelayCommand SelectedPayPeriodChanged { get; set; }
void SelectPayPeriodCommand(Object parameter)
{
\\EDIT
if (parameter != null && CheckForEdits())
{
int index = PayPeriods.IndexOf((PayPeriod)parameter);
SelectedPayPeriod = PayPeriods[index];
}
}
XAML代碼
<Button x:Name="btnPrevWeek" Command="{Binding PrevPayPeriod}" CommandParameter="{Binding Path=SelectedItem, ElementName=comboPayPeriod}"/>
<ComboBox x:Name="comboPayPeriod" ItemsSource="{Binding PayPeriods}" DisplayMemberPath="Display" SelectedItem="{Binding SelectedPayPeriod, Mode=OneWay}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding SelectedPayPeriodChanged}" CommandParameter="{Binding Path=SelectedItem, ElementName=comboPayPeriod}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
<Button x:Name="btnNextWeek" Command="{Binding NextPayPeriod}" CommandParameter="{Binding Path=SelectedItem, ElementName=comboPayPeriod}">
我試圖離開了代碼,似乎不相干的格式化和佈局的東西的東西。
SelectedPayPeriodChanged的作品,所以如果我手動更改組合框的選定項目點擊它一切工作正常。另外兩個,PrevPayPeriod和NextPayPeriod,像他們應該觸發,但選定的項目不會改變。
所有的項目都顯示正常,當我點擊不同的支付期時,它會加載一個新的時間表就好了,但單擊prev和next按鈕不會改變我的SelectedPayPeriod。
我對此相當新,所以任何幫助/批評表示讚賞。
感謝
更新所選項目的結合模式爲雙向 –
如果我更新了我的問題。我正在使用名爲CheckForEdits()的函數來查看是否有任何未保存的更改,然後才能轉到下一個付款期限。如果我想在實際更改所選項目之前驗證,我仍然可以使用兩種方法嗎?謝謝 –