Ich verwende Telerik RadGridView
in meiner WPF
Anwendung. Eine der Spalten hat die folgende Funktionalität:Deaktivieren Sie das Gitter vor dem Ereignis Feuer WPF
Wenn der Benutzer den Wert der Spalte ändert, wird ein command
als Ereignis ausgelöst und ein Pop wird angezeigt. Mit dem Popup-Ergebnis (Ja oder Nein) aktualisiere ich die collection
.
Jetzt habe ich hier ein Problem.
Ausgabe:
Der Benutzer wird den Wert dieses column
in einem der row
Wechsel und vor der Alarm erscheint er in einem anderen row
derselben column
verändert. Die Anwendung funktioniert also anders und die Funktionalität bricht zusammen.
Arbeit versucht:
Ich habe versucht, das Netz einmal das Ereignis ausgelöst disable
und aktivieren, nachdem die Funktion abgeschlossen ist. Aber trotzdem ist der Benutzer sehr schnell, noch bevor das Ereignis triggers
er den Wert ändert.
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>
Befehl:
public ICommand BuidValueChangedCommand { get { return new RelayCommand(BuildValueChanged); } }
Ansichtsmodell:
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;
}
}
Ich brauche nur etwas wie Wieder strikte den Benutzer nicht den zweiten Wert bis zum Ereignis triggers
zu ändern und er wählt etwas (Ja/Nein) aus dem Popup.
Kann mir jemand dabei helfen?
Ich empfehle Ihnen, eine Eigenschaft IsGridEnabled in Ihrem ViewModel zu erstellen, und am Anfang des Befehlssatzes IsGridEnabled = false, am Ende des Befehlssatzes IsGridEnabled = false. Und natürlich binden Sie Ihre grid.IsEnabled an diese Eigenschaft –
@ ВасилийШапенко: Versucht, dass aber der Benutzer den Wert ändert, noch bevor das Ereignis (Befehl) ausgelöst wird. – iamCR
Verwendet Ihr ViewModel INotifyPropertyChanged? – ProgrammingDude