0

ユーザーコントロールを表示するためにタブコントロールを使用しました。最初のユーザーコントロールでは、データグリッドを使用してレコードを表示し、バインディングには一般的なリストを使用しました。選択した日付ごとにこのリストを変更したい場合、そのコレクションはデータベースとビューモデルで変更され、リストの設定プロパティの取得が実行されますが、新しいタブを選択したときにビューに表示され、その時点でリストの取得プロパティが実行されます &その後、選択した日付ごとにビューを取得できます。

私のメインビューと、最初のタブ項目として最初のユーザーコントロールを含むものを以下に示します。

ここに画像の説明を入力

上記のビューの Xaml コードを以下に示します。

            <DataGrid
                Background="Transparent"
                CanUserAddRows="True"
                CanUserReorderColumns="False"

                ItemsSource="{Binding Model_Transactions_TransactionsDetails_Jama,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
                HeadersVisibility="Column">
            </DataGrid>
            <Grid DockPanel.Dock="Bottom" VerticalAlignment="Bottom" >
                <Border BorderBrush="Black" BorderThickness="1" >
                    <Label HorizontalAlignment="Left" HorizontalContentAlignment="Right"  Width="75" Content="{Binding SumOfWeightJama,UpdateSourceTrigger=PropertyChanged}" FontFamily="Segoe UI" FontWeight="Bold"  FontSize="16" />
                </Border>
            </Grid>
            <DataGrid 
                Background="Transparent"
                CanUserAddRows="True"
                CanUserReorderColumns="False"
                ItemsSource="{Binding  Model_Transactions_TransactionsDetails_Udhar,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                HeadersVisibility="Column">
            </DataGrid>
            <Grid DockPanel.Dock="Bottom" VerticalAlignment="Bottom">
                <Border BorderBrush="Black" BorderThickness="1">
                    <Label Width="75" HorizontalAlignment="Left" HorizontalContentAlignment="Right"  Content="{Binding SumOfWeightUdhar,UpdateSourceTrigger=PropertyChanged}" FontFamily="Segoe UI" FontWeight="Bold"  FontSize="16"/>
                </Border>
            </Grid>

そして、上記のビューのビューモデルを以下に示します。

private DateTime _FilterDate ;
public DateTime FilterDate
{
    get
    {
         return _FilterDate;
    }
    set
    {
        _FilterDate = value;
        OnPropertyChanged("FilterDate");
        Model_Transactions_TransactionsDetails_Jama = (ViewModel.AllDataCollactions.AllTransactionsDetails.Where(s => s.TransactionDate.Equals(FilterDate) && s.IsJama).OrderBy(s => s.TransactionsID)).ToList();
        Model_Transactions_TransactionsDetails_Udhar = (ViewModel.AllDataCollactions.AllTransactionsDetails.Where(s => s.TransactionDate.Equals(FilterDate) && !s.IsJama).OrderBy(s => s.TransactionsID)).ToList();

    }
}
public List<Model_TransactionsDetails> Model_Transactions_TransactionsDetails_Jama
{
    get
    {
        return model_Transactions_TransactionsDetails_Jama;
    }
    set
    {
        model_Transactions_TransactionsDetails_Jama = value;
        OnPropertyChanged("Model_Transactions_TransactionsDetails_Jama");
    }
}
public List<Model_TransactionsDetails> Model_Transactions_TransactionsDetails_Udhar
{
    get
    {
        return model_Transactions_TransactionsDetails_Udhar;
    }
     set
    {
        model_Transactions_TransactionsDetails_Udhar = value;
        OnPropertyChanged("Model_Transactions_TransactionsDetails_Udhar");
    }
}
public ViewModel_MasterBook()
{
    FilterDate = DateTime.Now.AddDays(-1).Date;
    InsertCommand = new RelayCommand(AddExecute, CanAdd);
}

誰でも私を助けることができますか? 選択した日付に従ってすぐに表示するにはどうすればよいですか..

4

1 に答える 1

1

実際には動作するはずです。エラーは表示されません。しかし、WPF プロジェクトである種のリストを使用するときは、observablecollection を clear、add、delete で使用します。

しかし、最初にバインディングを変更します

ItemsSource="{Binding Model_Transactions_TransactionsDetails_Jama,Mode=OneWay}" 

Mode=TwoWay は意味がないため、アイテムソースをデータグリッドからビューモデルに設定することはありません。

次に、ObservableCollection に変更します

public ObservableCollection<Model_TransactionsDetails> Model_Transactions_TransactionsDetails_Jama
{
   get; private set;
}

一度だけ初期化するため、プライベートセッターを使用します。

//アクター

this.Model_Transactions_TransactionsDetails_Jama = new ObservableCollection<Model_TransactionsDetails>();

次に、 FilterDate セッターでコレクションを埋めます

this.Model_Transactions_TransactionsDetails_Jama.Clear();
var newdata = (ViewModel.AllDataCollactions.AllTransactionsDetails.Where(s => s.TransactionDate.Equals(FilterDate) && s.IsJama).OrderBy(s => s.TransactionsID)).ToList();
this.Model_Transactions_TransactionsDetails_Jama.AddRange(newdata);//AddRange is simply an extension method i wrote, you can simply use foreach and .Add()
于 2012-09-14T09:00:13.437 に答える