2013-12-05 4 views
0

У меня есть Datagrid, я использую Observable Collection в качестве источника данных моего datagrid. Я заполняю свой Datagrid из выбранного значения combobox. У combobox есть только 2 значения: Direct Bill и PO Bill. Если пользователь выбирает Direct bill из combobox, тогда пользователь может добавлять строки в datagrid. Если значение PO Bill, то пользователь не может добавлять строки в datagrid.Отменить AddNew row to datagrid

Но моя проблема в том, что я хочу отменить добавление новой строки в datagrid, если значение combo-box - PO Bill. Я пробовал его с помощью CollectionChangedEvent, но не смог, как это сделать?

Мой код за это:

void ListCollectionChanged 
       (object sender, 
       System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 

     if (e.Action == NotifyCollectionChangedAction.Add) 
     { 
      return; 
     } 

    } 
+0

Как пользователь добавит строку? Есть ли кнопка, которую вы предоставили? – Shaharyar

+0

@Shaharyar, когда клавиша табуляции нажимает на последнюю ячейку текущей строки, добавлена ​​новая строка. – Mussammil

+0

Когда вы нажимаете клавишу 'tab', какой код выполняет? покажите нам – Shaharyar

ответ

1

Это не полный ответ, так как вы еще не опубликовали ни соответствующего кода, но я надеюсь, что это приведет вас на правильный путь.

Я не знаю, откуда вы добавляете строку, но вы можете влиять на способность делать это таким образом:

CS:

public enum EBillType 
{ 
    Direct , PO 
}; 


public class BillTypeToBooleanConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    {   
     EBillType billType = (EBillType)value; 
     return billType == EBillType.PO; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

XAML:

<Window.Resources> 
    <ObjectDataProvider x:Key="billTypes" MethodName="GetValues" 
       ObjectType="{x:Type sys:Enum}"> 
     <ObjectDataProvider.MethodParameters> 
      <x:Type TypeName="local:EBillType" /> 
     </ObjectDataProvider.MethodParameters> 
    </ObjectDataProvider> 

    <local:BillTypeToBooleanConverter x:Key="billTypeToBooleanConverter" />   
</Window.Resources> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="4*"/> 
    </Grid.RowDefinitions> 

    <ComboBox x:Name="cb" ItemsSource="{Binding Source={StaticResource billTypes}}" IsSynchronizedWithCurrentItem="True"/> 
    <DataGrid 
      AutoGenerateColumns="False" 
      ItemsSource="{Binding Bills}" 
      CanUserAddRows="{Binding ElementName=cb, Path=SelectedValue, 
        Converter={StaticResource billTypeToBooleanConverter}, Mode=OneWay}" Grid.Row="1" />                    
</Grid> 
+0

, когда клавиша табуляции нажимает на последнюю ячейку текущей строки, добавлена ​​новая строка – Mussammil

+0

. Напишите этот код, пожалуйста. –

+0

voila ... это решается мой проблема. – Mussammil