我在我的WPF
應用程序中使用telerik RadGridView
。其中一列具有以下功能:在事件發生之前禁用網格WPF
當用戶更改列的值時,會將command
作爲事件觸發並顯示彈出窗口。使用彈出式結果(是或否),我正在更新collection
。
現在我在這裏面臨一個問題。
問題:
用戶正在改變column
的價值在row
之一,並出現警告之前,他是在同一個column
另一個row
改變。所以應用程序以不同的方式工作,功能崩潰。
工作的嘗試:
我試圖disable
電網一旦事件火災和啓用該功能完成後。但即使在事件triggers
他正在改變價值之前,用戶仍然非常快。
XAML:
<telerik:GridViewDataColumn Name="grdItemBuildColumn" DataMemberBinding="{Binding Build, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsReadOnlyBinding="{Binding IsEnable, Mode=OneWay, UpdateSourceTrigger= PropertyChanged}">
<telerik:GridViewDataColumn.CellEditTemplate> <DataTemplate>
<telerik:RadMaskedNumericInput Value="{Binding Build, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Mask="#1.0" Placeholder=" "
TextMode="PlainText" AllowInvalidValues="False" IsClearButtonVisible="False" AutoFillNumberGroupSeparators="False"ext:MaskedInputExtensions.Minimum="0" SelectionOnFocus="SelectAll" AcceptsReturn="False">
<i:Interaction.Triggers> <i:EventTrigger EventName="ValueChanged">
<i:InvokeCommandAction Command="{Binding BuidValueChangedCommand, Source={StaticResource MarketSeriesViewModel}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</telerik:RadMaskedNumericInput>
</DataTemplate>
</telerik:GridViewDataColumn.CellEditTemplate>
</telerik:GridViewDataColumn>
命令:
public ICommand BuidValueChangedCommand { get { return new RelayCommand(BuildValueChanged); } }
視圖模型:
private void BuildValueChanged()
{
// Ask confirmation for delete.
if (ShowMessages.MessageBox("This will be removed from the collection", "Application"))
{
DeleteItem(SelectedItem.Id)
}
else
{
Item bo = RestoreBuild(SelectedItem);
SelectedItem = bo;
}
}
我只需要像重限制用戶不要更改第二個值,直到事件triggers
,並且他從彈出窗口中選擇某些內容(是/否)。
有人可以幫助我嗎?
我建議你在你的ViewModel中創建屬性IsGridEnabled,並在命令集IsGridEnabled = false的開始,在命令集的最後設置IsGridEnabled = false。當然,將你的grid.IsEnabled綁定到這個屬性 –
@ВасилийШапенко:試過了,但用戶在事件(命令)被觸發之前改變了值。 – iamCR
您的viewModel使用INotifyPropertyChanged嗎? – ProgrammingDude