Почему наблюдаемая коллекция предоставляет нулевое значение для привязки данных xaml c # wpf - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть сетка данных, которая должна представлять два типа набора данных в два разных времени события.

  1. При загрузке формы - сетка данных показывает modelclasswithcombobox (работает нормально)

  2. при нажатии кнопки - сетка данных показывает модель для других пользователей (проблема здесь в том, что она показывает пустую сетку данных, хотя данные заполнены в сборе)

XAML:

<DataGrid  Height="150" x:Name="datagrid1" AutoGenerateColumns="True" CanUserAddRows="False" Width="467" Margin="299,-135,40,9" HorizontalAlignment="Left">
    <DataGrid.Style>
        <Style  TargetType="{x:Type DataGrid}">
            <Setter  Property="ItemsSource" Value="{Binding Populatedatagridwithobservablecollection.modelclasswithcombobox}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Isauditorsearch}" Value="True">
                    <Setter Property="ItemsSource" Value="{Binding 
     modelforseperateusers,
     diag:PresentationTraceSources.TraceLevel=High,Mode=TwoWay }"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.Style>
</DataGrid>

код:

  public interface INofificationActionfordatagrid {
ObservableCollection < datagridmodel > modelclasswithcombobox {
    get;
    set;
}
void getdatausinglinq();
}

public class PopulateDatagrid: INofificationActionfordatagrid {
public ObservableCollection < datagridmodel > modelclasswithcombobox {
    get;
    set;
}
   public void getdatausinglinq() {
    using(Operations_Productivity_ToolEntities context = new 
 Operations_Productivity_ToolEntities()) {
        var a1 = from t1 in context.Test_ImportedAuditdata
        where t1.status == "Pending"
        select t1;

        if (modelclasswithcombobox == null) modelclasswithcombobox = new 
  ObservableCollection < datagridmodel > ();

        foreach(var a in a1) {
            modelclasswithcombobox.Add(new datagridmodel {

                AuditId = a.AuditId.ToString(),
                Claimnumber = a.ClaimNumber.ToString(),
                UserName = a.username,
                CreateDate = a.Created_Date.ToString(),
                ID = a.id.ToString(),
                Status = a.status

            });
        }
        context.SaveChanges();

    }
    }
 }

public class ViewModel {
public ObservableCollection < datagridmodelforSeperateUsers > 
modelforseperateusers {
    get;
    set;
}

INofificationActionfordatagrid
_populatedatagridwithobservablecollection = new PopulateDatagrid();

public ViewModel() {
    Isauditorsearch = false;
    _populatedatagridwithobservablecollection.getdatausinglinq();
    ReassignusersSeperately = new RelayCommand(o = 
   >Filterbind(Currentcomboboxitem3));
}

public INofificationActionfordatagrid
Populatedatagridwithobservablecollection {
    get {
        return _populatedatagridwithobservablecollection;
    }
    set {
        if (value != _populatedatagridwithobservablecollection) {
            _populatedatagridwithobservablecollection = value;

            OnPropertyChanged("Populatedatagridwithobservablecollection");
        }
    }
   }

   public void Filterbind(string an) {
    Isauditorsearch = true;

    using(Operations_Productivity_ToolEntities context = new 
   Operations_Productivity_ToolEntities()) {
        var a1 = from t1 in context.Test_ImportedAuditdata
        where t1.username == an
        select t1;
        try {
            if (modelforseperateusers == null) modelforseperateusers = new 
     ObservableCollection < datagridmodelforSeperateUsers > ();

            foreach(var a in a1) {
                modelforseperateusers.Add(new 
        datagridmodelforSeperateUsers {
                    toUpdate = false,
                    AuditId = a.AuditId.ToString(),
                    Claimnumber = a.ClaimNumber.ToString(),
                    UserName = a.username,
                    CreateDate = a.Created_Date.ToString(),
                    ID = a.id.ToString(),
                    Status = a.status

                });
            }
            context.SaveChanges();
        } catch(Exception e) {
            MessageBox.Show(e.ToString());
        }
    }
}
}

Проблема: Наблюдаемая модель коллекции для пользователей-операторов заполняется данными в модели представления, но она не связана с xaml.

При отладкеxaml:

     Warning: 56 : Created BindingExpression (hash=36729282) for Binding (hash=25749409)
     System.Windows.Data Warning: 58 :   Path: 'modelforseperateusers'
     System.Windows.Data Warning: 61 : BindingExpression (hash=36729282): Default update trigger resolved to PropertyChanged
     System.Windows.Data Warning: 62 : BindingExpression (hash=36729282): Attach to System.Windows.Controls.DataGrid.ItemsSource (hash=55797203)
     System.Windows.Data Warning: 67 : BindingExpression (hash=36729282): Resolving source 
     System.Windows.Data Warning: 70 : BindingExpression (hash=36729282): Found data context element: DataGrid (hash=55797203) (OK)
     System.Windows.Data Warning: 78 : BindingExpression (hash=36729282): Activate with root item ViewModel (hash=38471091)
     System.Windows.Data Warning: 107 : BindingExpression (hash=36729282):   At level 0 using cached accessor for ViewModel.modelforseperateusers: RuntimePropertyInfo(modelforseperateusers)
     System.Windows.Data Warning: 104 : BindingExpression (hash=36729282): Replace item at level 0 with ViewModel (hash=38471091), using accessor RuntimePropertyInfo(modelforseperateusers)
     System.Windows.Data Warning: 101 : BindingExpression (hash=36729282): GetValue at level 0 from ViewModel (hash=38471091) using RuntimePropertyInfo(modelforseperateusers): <null>
     System.Windows.Data Warning: 80 : BindingExpression (hash=36729282): TransferValue - got raw value <null>
     System.Windows.Data Warning: 84 : BindingExpression (hash=36729282): TransferValue - implicit converter produced <null>
     System.Windows.Data Warning: 89 : BindingExpression (hash=36729282): TransferValue - using final value <null>

Увидев отладочную информацию, мы видим, что коллекция предоставляет нулевое значение, и я считаю, что это причина пустой сетки данных.Пожалуйста, предоставьте информацию по проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...