1

Observable別の .cs (クラス) ファイル内に Collectionを配置し、それをMainPage.xamlで使用する場合、同じ Observable Collection 内に格納されているすべてのデータに後で別の XAML ページ内からアクセスできるようにするにはどうすればよいですか?時間?

例えば

MyClass.cs:
public ObservableCollection<String> oC = new ObservableCollection<String>();

MainPage.xaml.cs:
// add to observable collection

SecondPage.xaml.cs:
// access and use data stored in ObservableCollection
4

4 に答える 4

3

コレクションを静的メンバーとして宣言することもできます。

または、シングルトン パターンを実装します。

XAML でコレクションにバインドする場合、ビュー モデルでアクセサーを作成する必要があります。

public ObservableCollection<String> Accessor
{
  get
  {
    return MyClass.oC;
  }
}
于 2013-02-18T13:37:24.783 に答える
2

簡単な方法は、静的に宣言し、インスタンスではなく型を介してアクセスすることです。

例えば

class SomeClass 
{
    public static bool SomeBool = false;
}

class SomeOtherClass
{
    public void SomeMethod() 
    {
        Debug.Write(SomeClass.SomeBool); // Ouput = false
    }
}

このオブザーバブルは静的であるため、単一のインスタンスになることに注意してください。これに対する変更は、それにアクセスするすべてのオブジェクトにすぐに表示されます。つまり、一部のコードがオブザーバブルを反復し、別のコードがそれに追加/削除しようとする場合、イテレーター例外をスローします

このような場合は、別の方法を検討するか、ロックを使用してコレクションへのシングル スレッド アクセスを確保してください。

于 2013-02-18T13:37:50.773 に答える
2

では、こんなものはいかがでしょう。どこからでもアクセスできるリソース...

public class CollectionSrc
{
  public ObservableCollection<...> Col 
  { 
    get { return _col ?? (_col = new ObservableCollection<...>()); }
  }
}

App.xaml

<ns:CollectionSrc x:Key="ColSrc" /> <!--ns .. the namespace of CollectionSrc-->

ColSrcこれで、xaml コードのどこにでもアクセスできます。例えば

<ListBox ItemsSource={Binding Col, Source={StaticResource ColSrc}} />
于 2013-02-18T13:41:10.373 に答える
0

私はあなたがこれを望んでいると思います:

MyClass.cs:
public static ObservableCollection<String> oC = new ObservableCollection<String>();

MainPage.xaml.cs:
// add to observable collection

SecondPage.xaml.cs:
// access and use data stored in ObservableCollection

が静的になるoCと、任意のクラス/ページから何度でも参照できます。

ただし、それにバインドする場合 (Windows 8 アプリではフィールドまたは静的プロパティにバインドできないため)、その XAML ページが単純なプロパティで静的プロパティを参照するようにする必要があります。

SecondPage.xaml.cs:
public static ObservableCollection<String> oC { get { return MyClass.oC; } }

これが理にかなっていることを願っています!

于 2013-02-18T18:50:42.583 に答える