2013-06-20 2 views
0

У меня есть DataGrid, как это:Как я могу привязать IsEnabled к тому, есть ли у datagrid один элемент?

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

и контрольную вкладку, как это:

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

Я хочу TabControl быть включен только тогда, когда один элемент выбран в сетке. Если выбранный элемент равен NULL, или если выбрано несколько элементов, элемент управления вкладкой должен быть отключен.

ответ

2

Определите логическое свойство и привяжите его к атрибуту IsEnabled вашего TabControl.

В сеттер отеля SelectedItem следует проверить, если выбранный элемент является нулевым или количество элементов составляет> 1 исходя из условия, установленного истинным или ложным IsEnabled связывания собственности на вкладке элемента управления

Datagrid Переплет:

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

TabControl Переплет:

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

DataGrid в Selcted Предмет:

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

Я думаю, что вы ищете [DataGrid.SelectedItems] (http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.selecteditems (v = vs.95) .aspx), а не [DataGrid.SelectedItem] (http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.selecteditem (v = vs.95) .aspx). –

+0

К сожалению, SelectedItem не обновляется при многократном изменении. Например, если я выбираю один, а затем многократно выбираю. – ConditionRacer

+0

Добавьте два свойства привязки элемента данных для одного ряда (SelectedItem) и другое для выбора нескольких строк (SelectedItems). и имеют ту же логику. – Kurubaran

0

Предлагаю вам использовать конвертер и привязать его к имени элемента proeprty, как показано ниже. \

пространство имен

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(); 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^