首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF IsEnabled网格

WPF IsEnabled网格
EN

Stack Overflow用户
提问于 2013-12-23 15:23:15
回答 3查看 10.3K关注 0票数 0

当我的属性为null时,我想禁用网格,当不是Null时,启用网格。

在我的.XAML:

代码语言:javascript
复制
  <Grid Grid.Row="2" IsEnabled="{Binding ElementName=dgCustomers, Path=SelectedItem}">
      <my:ProductsHistoryDetailView />
  </Grid>

在我的ViewModel.cs:

代码语言:javascript
复制
    public ProductHistory SelectedItem
    {
        get { return _SelectedItem; }
        set
        {
            if (_SelectedItem != value)
            {
                _SelectedItem = value;
                RaisePropertyChanged(() => SelectedItem);
            }
        }
    }
EN

回答 3

Stack Overflow用户

发布于 2013-12-23 23:21:35

使用样式触发器更改已启用的属性,而不是尝试直接绑定属性。

代码语言:javascript
复制
<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>
票数 3
EN

Stack Overflow用户

发布于 2013-12-23 15:30:17

你可以用IValueConverter

代码语言:javascript
复制
<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

代码语言:javascript
复制
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;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2013-12-23 15:28:39

请确保选择项具有如下所示的有效值:

代码语言:javascript
复制
<Grid Grid.Row="2" IsEnabled="{Binding ElementName=dgCustomers, Path=SelectedItem.Value}">
      <my:ProductsHistoryDetailView />
  </Grid>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20746400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档