当我的属性为null时,我想禁用网格,当不是Null时,启用网格。
在我的.XAML:
<Grid Grid.Row="2" IsEnabled="{Binding ElementName=dgCustomers, Path=SelectedItem}">
<my:ProductsHistoryDetailView />
</Grid>在我的ViewModel.cs:
public ProductHistory SelectedItem
{
get { return _SelectedItem; }
set
{
if (_SelectedItem != value)
{
_SelectedItem = value;
RaisePropertyChanged(() => SelectedItem);
}
}
}发布于 2013-12-23 23:21:35
使用样式触发器更改已启用的属性,而不是尝试直接绑定属性。
<Grid Grid.Row="2">
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="IsEnabled" Value="True"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=dgCustomers, Path=SelectedItem"}" Value={x:Null}>
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
</Grid>发布于 2013-12-23 15:30:17
你可以用IValueConverter
<Grid Grid.Row="2" IsEnabled="{Binding
ElementName=dgCustomers, Path=SelectedItem,
Converter={StaticResource NullToFalseConverter}">
public class NullToFalseConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value == null ? false : true;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}或者,可以更容易地将另一个属性IsSelected添加到视图模型中,您可以直接绑定到IsEnabled。
public bool IsSelected
{
get { return _isSelected; }
set
{
if (_isSelected != value)
{
_isSelected = value;
RaisePropertyChanged(() => IsSelected);
}
}
}
public ProductHistory SelectedItem
{
get { return _SelectedItem; }
set
{
if (_SelectedItem != value)
{
_SelectedItem = value;
RaisePropertyChanged(() => SelectedItem);
}
IsSelected = value != null;
}
}发布于 2013-12-23 15:28:39
请确保选择项具有如下所示的有效值:
<Grid Grid.Row="2" IsEnabled="{Binding ElementName=dgCustomers, Path=SelectedItem.Value}">
<my:ProductsHistoryDetailView />
</Grid>https://stackoverflow.com/questions/20746400
复制相似问题