我如何将IsEnabled绑定到数据网格是否选择了单个项目



我有一个这样的DataGrid:

<DataGrid ItemsSource="{Binding MySource}" SelectedItem="{Binding SelectedItem}" />

和一个标签控件,像这样:

<TabControl IsEnabled="{Binding ???}" />

我希望TabControl仅在数据网格中选择单个项目时才启用。如果选中的项为空,或者选中了多个项,则应该禁用选项卡控件。

定义一个布尔属性,并将其绑定到TabControl的IsEnabled属性。

在SelectedItem属性的Setter中,根据选项卡控件的IsEnabled绑定属性的条件设置true或false,检查所选项是否为null或项计数是否> 1

Datagrid绑定:

<DataGrid ItemsSource="{Binding MySource}" SelectedItem="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

TabControl绑定:

<TabControl IsEnabled="{Binding IsTabEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

Datagrid的选定项目:

Public SelectedItem
{
get
{
}
set
{
if(null == SelectedItem || SelectedItem.count > 1)
IsTabEnabled = false;
}
}

我建议您使用转换器,并与元素名称属性绑定,如下所示。

名称空间

 xmlns:local="clr-namespace:WpfApplication1"
  <Window.Resources>
        <local:Enabledconverters x:Key="converter"/>
    </Window.Resources>

    <TextBlock  Name="textBlock1" Text="Sample Window"  VerticalAlignment="Center" HorizontalAlignment="Center" Grid.ColumnSpan="2" Margin="96,123" />
                <ListBox x:Name="list">
                </ListBox>
                <TabControl x:Name="tab" IsEnabled="{Binding SelectedItem,ElementName=list,Converter={StaticResource converter}}" Grid.Column="1">
                    <TabItem Header="Test"/>
                    <TabItem Header="Test"/>
                    <TabItem Header="Test"/>
                </TabControl>

转换代码。

 public class Enabledconverters : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value != null)
                return true;
            return false;
        }
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

最新更新