1

いつものように、少し調べてみましたが、サイトや他の場所で答えを見つけることができませんでした. 既存の質問を指摘していただければ幸いです。それ以外の場合は、次の質問があります。

オブジェクトにListViewオブジェクトをバインドしていDataTableます。以下の定義を参照してください。

<ListView Name="MyList">
        <ListView.View>
            <GridView>
                <GridViewColumn x:Name="Column1Name" DisplayMemberBinding="{Binding Path=Column1}" />
                <GridViewColumn x:Name="Column2Name" DisplayMemberBinding="{Binding Path=Column2}" />
                <GridViewColumn x:Name="Column3Name" DisplayMemberBinding="{Binding Path=Column3}" />
                <GridViewColumn x:Name="Column4Name" DisplayMemberBinding="{Binding Path=Column4}" />
            </GridView>
        </ListView.View>
    </ListView>

バインディング コードは次のとおりです。

DataTable items = new DataTable();
items = DatabaseService.GetMyItems(20, true, items);
Binding binding = new Binding();
binding.Source = items.DefaultView;
binding.Mode = BindingMode.OneWay;
MyList.SetBinding(ListView.ItemsSourceProperty, binding);

クエリを実行する実際のコードは次のとおりです。

/** Parameters: commandText = <sql>, table = items */    
using (DbConnection connection = new SqlConnection(Project.Properties.Settings.Default.ConnectionString))
        {
            using (DbCommand command = connection.CreateCommand())
            {
                command.CommandText = commandText;
                command.CommandType = CommandType.Text;

                using (DbDataAdapter dataAdapter = new SqlDataAdapter())
                {
                    dataAdapter.SelectCommand = command;
                    dataAdapter.Fill(table);
                }
            }
        }

このコードは初めて機能しGetMyItemsますが、データが変更された後にメソッドを再度呼び出すと、データが更新されません。

私は何を間違っていますか?

4

1 に答える 1

1

初めてコンストラクターから作業している場合は、ビューをロードしたら、プロパティが変更されたことを通知する必要があります。

GetMyItems メソッド内で次を使用します。

OnPropertyChanged("items");

次に、メソッドを宣言します。

  // Create the OnPropertyChanged method to raise the event 
  protected void OnPropertyChanged(string name)
  {
      PropertyChangedEventHandler handler = PropertyChanged;
      if (handler != null)
      {
          handler(this, new PropertyChangedEventArgs(name));
      }
  }

ViewModel で OnPropertyChanged メソッドを取得するために、ビルド済みの MVVM フレームワークを使用して NotifyPropertyChanged オブジェクトを継承していないのが通常です。

DataTable 内に監視可能なプロパティがあったことは問題ではありません。問題は変更通知です。ObservableCollectionが必要です。DataTable (DataSet は 1 つ以上の DataTable によって構築されます) を ObservableCollection に変換し、ObservableCollection を UI element にバインドできます。

于 2012-09-05T03:13:23.737 に答える