【发布时间】:2016-05-31 16:39:26
【问题描述】:
我在我的WPF 应用程序中使用 Telerik RadGridView。其中一列具有以下功能,
当用户更改列的值时,command 会作为事件触发并显示弹出消息。使用弹出结果(是或否)我正在更新collection。
现在我遇到了一个问题。
问题:
用户正在更改其中一个row 中的column 的值,并且在出现警报之前,他正在更改另一个row 的相同column。因此,应用程序以不同的方式工作,功能崩溃。
工作尝试:
一旦事件触发并在功能完成后启用,我尝试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 绑定到这个属性
-
@ВасилийШапенко :尝试过,但用户甚至在事件(命令)被触发之前更改了值。
-
您的 viewModel 是否使用 INotifyPropertyChanged?
-
@ProgrammingDude:是的
-
@SanthoshKumar 在命令执行之前用户如何更改其他值?一次复制粘贴多个单元格?还是只是命令在延迟后执行?
标签: c# wpf telerik radgridview