J'ai dans mon Xaml un contrôle de pivot:"Actualiser" Pivot commande avec boîte à outils MVVM-lumière pour WP7
<controls:Pivot ItemsSource="{Binding ObjectList}">
<controls:Pivot.HeaderTemplate>
<DataTemplate>
<TextBlock />
</DataTemplate>
</controls:Pivot.HeaderTemplate>
<controls:Pivot.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Value1}" />
<TextBlock Text="{Binding Value2}" />
</StackPanel>
</DataTemplate>
</controls:Pivot.ItemTemplate>
</controls:Pivot>
Mon ViewModel est:
public class MyObject
{
public string Value1 { get; set; }
public string Value2 { get; set; }
}
public class MyViewModel : ViewModelBase
{
public const string ObjectListPropertyName = "ObjectList";
private ObservableCollection<MyObject> _objectList;
public ObservableCollection<MyObject> ObjectList
{
get
{
return _objectList;
}
private set
{
if (_objectList == value)
return;
_objectList = value;
RaisePropertyChanged(ObjectListPropertyName);
}
}
private DispatcherTimer timer;
public MyViewModel()
{
ObservableCollection<MyObject> collection = new ObservableCollection<MyObject>
{
new MyObject {Value1 = "One"},
new MyObject {Value1 = "Two"},
new MyObject {Value1 = "Tree"}
};
ObjectList = collection;
timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(2)};
timer.Tick += timer_Tick;
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
foreach (MyObject myObject in _objectList)
{
myObject.Value2 = "Something";
}
Application.Current.RootVisual.Dispatcher.BeginInvoke(() => RaisePropertyChanged(ObjectListPropertyName));
}
}
Lorsque le timer_tick est atteint, je suppose le contrôle du pivot pour actualiser avec les nouvelles valeurs ... mais je ne peux pas voir les changements.
Qu'est-ce qui me manque?
Merci d'avance pour votre aide
vous semblez avoir raison, si je fais: for (int i = 0; i <_objectList.Count; i ++) { _objectList [i] = new MyObject {Valeur1 = _objectList [i] .Value1, Valeur2 = "Quelque chose"}; } ça marche ... – Tim
est-ce un bon moyen? ou juste une mauvaise solution de contournement: D – Tim
Je pensais que peut-être vous pouvez créer une nouvelle liste de MyObjects, peupler cela avec les nouvelles valeurs (avec foreach ou for-next, de toute façon), puis définir la liste originale à cette nouvelle temporaire liste. cela modifierait en fait la liste et permettrait à l'événement de se déclencher. Ce n'est pas joli, mais vu l'exemple, ça devrait marcher. – Chazmanian