DataGrid设置属性,但不获取值来改变SelectedIndex
本文关键字:改变 SelectedIndex 获取 设置 属性 DataGrid | 更新日期: 2023-09-27 18:11:39
我在Datagrid中遇到了一个奇怪的问题。我使用WPF与数据绑定,我有一个数据网格,和3个按钮在一个页面-保存,更新,取消-和很多标签。这些标签,当用户单击更新按钮时,将启用这些标签的编辑模式。
在编辑模式下,该用户不能更改网格的SelectedIndex(这是我的问题)。我试图创建一个属性IsNotEditable,绑定到IsEnabled="的DataGrid,但如果它被禁用,当前行是未选择的。
我不能用那个,因为当用户点击保存时,我会保存选中的行。所以…我已经创建了另一个属性PlacasSelectedItem和一个"支持"属性PlacasSelectedAux,代码如下:
public ConeSlab PlacasSelectedAux { get; set; }
private ConeSlab placasSelectedItem;
public ConeSlab PlacasSelectedItem
{
get { return placasSelectedItem; }
set
{
if (CurrentEditMode == EditMode.View)
{
placasSelectedItem = value;
PlacasSelectedAux = value;
OnPropertyChanged("PlacasSelectedItem");
if (PlacasSelectedItem != null)
PlacaQuenteIsChecked = StringUtil.ConvertYesNoToBoolean(PlacasSelectedItem.Slab.InfHotSlab);
else
PlacaQuenteIsChecked = false;
ExibeLaminadorDestino();
}
else if (CurrentEditMode != EditMode.View)
{
// if isn't in ViewMode, and if user clicks in another Row, will force previously row to be selected.
placasSelectedItem = PlacasSelectedAux;
OnPropertyChanged("PlacasSelectedItem");
}
}
}
好,现在奇怪的问题:它执行了代码,我看到了代码的变化,但是SelectedIndex没有改变!数据绑定不起作用!
这是我的绑定:
<DataGrid SelectedItem="{Binding Path=PlacasSelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
谢谢你的帮助!
-
作为项目在你的网格可以是一个变化的主题,更安全的方式来访问你的行(在这一点上),从UI到模型,是在控件上找到一个实际的行。您可以尝试使用如下的扩展方法:
public static DataGridRow GetSelectedRowFromGrid(this DataGrid myDataGrid) { return (DataGridRow) myDataGrid.ItemContainerGenerator.ContainerFromItem(myDataGrid.SelectedItem); }
-
在我看来(希望我正确理解你的应用程序工作流程),你的数据行必须绑定到模型,所以用户当改变一行内容,它是由
DataBinding
来照顾改变下面链接的模型对象,之后,你需要的唯一的事情实际上,是保存你的模型对象, 所以没有任何UI访问需要。
好的,问题解决了。到xaml的Datagrid:
IsHitTestVisible="{Binding Path=IsEditing, Mode=OneWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource InverseBooleanConverter}}"
创建静态资源:
<Page.Resources>
<ut:InverseBooleanConverter x:Key="InverseBooleanConverter" />
<Page.Resources>
这将反转布尔值以禁用更改Datagrid行选择,使用这个方法:
/// <summary>
/// Convert bool to !bool
/// </summary>
[ValueConversion(typeof(Boolean), typeof(Boolean))]
public class InverseBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
return !(Boolean)value;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
现在用户不能选择DataGrid中的任何其他行!谢谢你的帮助