2010-11-02 2 views
3

у меня в Xaml контроль поворота:"Обновить" Pivot Control с MVVM-света инструментарием для 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>  

Мои ViewModel является:

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)); 
    } 
} 

Когда timer_tick достигнута, я должен элемент управления поворота обновится с новыми значениями ... но я не вижу никаких изменений.

Что мне не хватает?

Заранее спасибо за помощь

ответ

2

Я предполагаю, что, возможно, обновление членов списка без обновления самого списка является проблемой. Когда вы поднимаете событие измененного свойства - оно предназначено для всей коллекции. Коллекция все еще указывает на равную ссылку на себя, несмотря на то, что члены изменились.

Попробуйте разместить контрольную точку в сеттере и посмотреть, не сработало ли событие изменения свойства.

+0

вы, кажется, правы, если я делаю: для (INT I = 0; I <_objectList.Count; я ++) { _objectList [I] = новый MyObject {Value1 = _objectList [я] .Value1, Value2 = "Что-то"}; } это работает ... – Tim

+0

это хороший способ? или просто плохое обходное решение: D – Tim

+0

Я думал, что, возможно, вы можете создать новый список MyObjects, заполнить его новыми значениями (с помощью foreach или for-next, в любом случае), а затем установить исходный список для этого нового временного список. что, по сути, изменит список и позволит пожарному событию. Это некрасиво, но, учитывая пример, он должен работать. – Chazmanian

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