2015-09-22 3 views
0

В моем случае все работает нормально IsBusy свойство, получая данные от веб-службы в VM (View Model), я явно обновляю IsBusy = true, чтобы показать индикатор выполнения в пользовательском интерфейсе, но он НЕ работает. И свойствоchanged всегда равно нулю. Таким образом, видимость видимости всегда видима, которая связывается с свойством IsBusy. пожалуйста, помогите, что мне здесь не хватает.XMAL Binding and CollectionViewSource проблема в WinRT

Вот мой код XAML:

<local:StockVm x:Key="VM"/> 

    <CollectionViewSource x:Key="CVS" Source="{Binding RequestedItems, Source={StaticResource VM}}" 
          IsSourceGrouped="True" 
          ItemsPath="StockItems"/>  

</Page.Resources> 

Page Design XAML код:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <TextBlock Grid.Row="0" Visibility="{Binding Path=IsBusy, Converter={StaticResource boolVis1}, ConverterParameter=true}">Loading...</TextBlock> 
    <ProgressBar x:Name="LoadingBar" Visibility="{Binding Path=IsBusy, Converter={StaticResource boolVis1}, ConverterParameter=true}" IsIndeterminate="true" Height="4" /> 

    <local:DebugListView x:Name="TheListView" Grid.Row="1" ItemsSource="{Binding Source={StaticResource CVS}}" ItemTemplate="{StaticResource ItemTemplate}" > 
     <ListView.GroupStyle> 
      <GroupStyle HeaderTemplate="{StaticResource StockHeaderTemplate}" HeaderContainerStyle="{StaticResource ListViewHeaderItemStyle}" /> 
     </ListView.GroupStyle> 
    </local:DebugListView> 

</Grid> 

.cs код

public TestPageDev() 
     { 
      this.InitializeComponent(); 
      _view = this.Resources["VM"] as StockVm; 
      _view.LoadData();  
      this.DataContext = this; 
     } 

общественного класса StockVm: BindableObject { п rivate ObservableCollection _requestedItems;

public ObservableCollection<RequestedStock> RequestedItems 
    { 
     get { return _requestedItems; } 
     set { SetProperty(ref _requestedItems, value); } 
    } 

    public StockVm() 
    { 

    } 

    public async Task LoadData() 
    { 
     IsBusy = true; 
     await Task.Delay(TimeSpan.FromSeconds(5)); 
     IsBusy = false; 
    } 


    #region - Public Members - 
    private bool _IsBusy = false; 
    public bool IsBusy 
    { 
     get 
     { 
      return _IsBusy; 
     } 
     set 
     { 
      if (_IsBusy != value) 
      { 
       _IsBusy = value; 
       RaisePropertyEvent("IsBusy"); 
      } 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    #endregion 

    #region - INotifyPropertyChanged - 

    private void RaisePropertyEvent(string propName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propName)); 
    } 
    #endregion 

} 

ответ

1

Вы должны установить DataContext к примеру вида модели, как это:

public TestPageDev() 
{ 
    this.InitializeComponent(); 
    _view = this.Resources["VM"] as StockVm; 
    _view.LoadData();  
    this.DataContext = _view; // here 
} 

(где _view довольно странным название для модели объекта вида).

Или вы явно установить источник привязки, как это:

Visibility="{Binding Path=IsBusy, Source={StaticResource VM}, ...}" 
+0

Я бы поместить 'LoadData' в вашей ВМ' Constructor' и поместить его в XAML следующим образом: '<локальный: StockVm /> ', и ваша коллекция будет выглядеть так:' 'немного чище. – XAMlMAX

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