2012-02-11 11 views
0

これは初心者ですが申し訳ありませんが、私が行う必要があることを正確に説明した良い例は見つかりませんでしたWindows Phone 7:コレクションのアイテムの変更がListBox内で更新されるようにコレクションをListBoxにバインドする

パブリッククラスシング:私は2つのクラス持っ

:次のシナリオを有効にする事がオブジェクトを含むようにしたDependencyObject {

// Fields 
    private string name = ""; 


    // Properties 
    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 


    // Dependency Properties 

    public int Count 
    { 
     get { return (int)GetValue(CountProperty); } 
     set { SetValue(CountProperty, value); } 
    } 

    public static readonly DependencyProperty CountProperty = 
     DependencyProperty.Register("Count", typeof(int), typeof(Thing), null); 


    // Methods 
    public override string ToString() 
    { 
     return DateTime.Now.ToString() + " " + this.Name + " " + this.Count.ToString(); 

    } 

    // Constructors 

    public Thing(string name) 
    { 
     this.Name = name; 
    } 

} 

とクラスを

パブリッククラス物事:DependencyObjectCollection {

} 

MainPage.xaml.csファイルには、シングオブジェクトのカップルを作成し、物事のコレクションに追加します。

公開部分クラスメインページ:PhoneApplicationPage { Things Things = new Things();私の質問は、シングオブジェクトのDependencyPropertyにカウントが変更されたときにリストボックスの文字列が自動的に更新されると、リストボックスは、物事のオブジェクトと実物のオブジェクトの表示に含まれている事を表示するように結合コードを記述する方法である

// Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 
     Thing thingA = new Thing("A"); 
     Thing thingB = new Thing("B"); 
     Things.Add(thingA); 
     Things.Add(thingB); 


    } 

    private void Action_Click(object sender, RoutedEventArgs e) 
    { 
     this.Things[0].Count += 1; 
     Debug.WriteLine(this.Things[0].ToString()); 
    } 
} 

具体的には、上記のシナリオを実行するには、次のXAMLをどうすればよいですか。
つまり、Thingsオブジェクトに新しいThingオブジェクトを追加すると、新しいアイテムがListBoxに追加されます。 Thingsオブジェクトで既存のアイテムを変更すると、その変更がListBoxに表示されます。あなたはどのような方法でバインディングを使用したい場合は

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <StackPanel> 
      <ListBox x:Name="ThingsBox" /> 
      <Button x:Name="Action" Content="Action" Click="Action_Click"/> 
     </StackPanel> 
    </Grid> 
</Grid> 

答えて

0

まず、お使いのモデルに平凡な古いオブジェクト(INotifyPropertyChangedを実装)を使用することをお勧めします。依存関係オブジェクトの使用は過剰です。あなたがObservableCollectionを作成して、それを設定する必要があり、あなたがオブジェクトを追加/削除するようUIが自動的に更新されるように、リストにオブジェクトのコレクションをバインドするために

INotifyPropertyChanged vs. DependencyProperty in ViewModel

:この関連の質問を参照してくださいListBoxItemsSource

ObservableCollection<Thing> ThingsCollection { get; set } 

<MainPage x:Name="_mainPage"> 
    <ListBox ItemsSource="{Binding ThingsCollection}" /> 
</MainPage> 

ここで重要なのは、ObservableCollectionは、コレクションが変更されたときにイベントを発生させINotifyCollectionChangedを実装していることです。 ListBoxは、UIを同期させ続けるためにこれらのイベントを処理します。

0

は、あなたも、あなたがすることができ、それなしで、MVVMパターンのより以下

を検討する必要がありますのWindows Phone 7では

は、メインページには、リストボックスが含まれていますあなたのオブジェクトにバインドします。次の

//code behind main page 
Things ThingCollection { get; set } 


//in xaml 
<MainPage x:Name="_mainPage"> 

    <ListBox ItemsSource="{Binding ThingsCollection}" /> 
</MainPage> 

これは簡単な例ですが、基本的にはどのようなXAMLで行うことに似て何かを行うことができるはず。

関連する問題