ThabetMicrosoft Ответов: 1

Перезапись записи после поиска -MVVM WPF


У меня есть View ConfigRole, который содержит DataGrid с двумя столбцами: View и IsEnabled(флажок), а также область поиска.

и кнопка сохранить его работает правильно, я делаю все виды, которые я хочу IsEnabled и я сохраняю его : например:
Показывает: наиболее удивительных изображений в Интернете[^]

И когда я использую поле поиска, у меня есть правильный результат для всех представлений, которые я ищу в нем,например, я пишу "клиент" в поле поиска ,у меня есть все представления с ключом "клиент".:
Показывает: наиболее удивительных изображений в Интернете[^]

Моя проблема в том ,что когда я делаю кнопку Сохранить после поиска, все флажки (IsEnabled в первом представлении будут ложными !! только те представления, которые я включаю в представлении поиска, сохраняются !Показывает: наиболее удивительных изображений в Интернете[^]





Как я могу это исправить?

Спасибо,

Что я уже пробовал:

Язык XAML ConfigRole:
<pre>

        <TextBox x:Name="textBox" Text="{Binding ViewName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
         NotifyOnValidationError=True ,TargetNullValue=''}" />
		 
		 <DataGrid x:Name="dataGrid"  SelectedItem="{Binding SelectedView}" ItemsSource="{Binding ViewList}"   

                   CanUserAddRows="False" AlternationCount="2" AlternatingRowBackground="Blue" AutoGenerateColumns="False" >
				   
				    <DataGrid.Columns>
                <DataGridTextColumn Header="View" Binding="{Binding ViewCode}"  IsReadOnly="True" />

                <DataGridTemplateColumn Header="Is Enabled" Width="Auto">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox IsChecked="{Binding IsEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
               </DataGridTemplateColumn>       
            </DataGrid.Columns>
        
		   </DataGrid>
		<Button Command="{Binding  SaveRole}"  Visibility="{Binding Path=ShowSaveButton, Converter={StaticResource BoolToVis}}" CommandParameter="{Binding ElementName=ConfigureRole}"/>
		
    </Grid>

ConfigRoleViewModel:

<pre>
         private ObservableCollection<ViewRoleMapClass> _viewList;
         private MiniTasServicesClient WCFclient = new MiniTasServicesClient();        
         public int test;
		 
		  public ConfigRoleModel(int RoleId,ObservableCollection<UserRoleClass> roleList)
        {
            test = RoleId;
            _viewList = new ObservableCollection<ViewRoleMapClass>(WCFclient.getViewRoleMapsByRole(RoleId));       
             saveRole = new RelayCommand<Window>(configRole);       
        }   
		 
         private RelayCommand<Window> saveRole;
         public RelayCommand<Window> SaveRole
        {
            get { return saveRole; }
        }
		          
        
		//all list of Views 
		public ObservableCollection<ViewRoleMapClass> ViewList
             {
                 get { return _viewList; }
                 set
                 {
                     _viewList = value;
                     OnPropertyChanged("ViewList");
                 }
             }  
			 
			 //the Function of the Button Save
			  private void configRole(Window window)
        {     
             List<ViewRoleMapClass> listViewRoleMap = new List<ViewRoleMapClass>();
            foreach (ViewRoleMapClass view in ViewList)
            {
                if (view.IsEnabled) listViewRoleMap.Add(view);
            }    
			 int resultUpdate = WCFclient.updateViewRoleMap(listViewRoleMap, test);
			 if (resultUpdate == 0)
                {
                    string sCaption = "Save notification";
                    string sInformation = "Save operation is performed successfully";
                    MessageBoxButton btnMessageBox = MessageBoxButton.OK;
                    MessageBoxImage icnMessageBox = MessageBoxImage.Information;

                    MessageBoxResult rsltMessageBox = MessageBox.Show(sInformation, sCaption, btnMessageBox, icnMessageBox);                   
                }               
                _refreshList();
		}
		
		//Search		
		     private string _viewName;
             public string ViewName
             {
                 get { return _viewName; }
                 set
                 {
                     _viewName = value;
                     OnPropertyChanged("ViewName");
                    _viewList = searchByCriteria(ViewName);
                     OnPropertyChanged("ViewList");
                 }
             }			 
			  private ObservableCollection<ViewRoleMapClass> searchByCriteria(string _viewName)
             {
                 List<ViewRoleMapClass> resultSearch=new List<ViewRoleMapClass>();                 
                 _viewList = new ObservableCollection<ViewRoleMapClass>(WCFclient.getViewRoleMapsByRole(test));                 
                 
                 if (_viewName != null)
                 {
                     resultSearch = _viewList.Where(c => c.ViewCode.ToLower().Contains(_viewName.ToLower())).ToList();                       
                 }                   
                 return new ObservableCollection<ViewRoleMapClass>(resultSearch);                            
             }

1 Ответов

Рейтинг:
0

Angelo L

Похоже, что в вашем коде вы заменяете свое имя представления новым ObservableCollection каждый раз, когда обновляете его, что означает, что вы нарушаете свою ссылку, которая содержала предыдущее состояние объекта. Если вы не сохраняете эту информацию и не обновляете ее обратно, то то, что вы делаете, - это перезаписываете ее новым объектом, где в случае вашего свойства IsEnabled логическое значение по умолчанию равно False.