0

このリクエストには若干のバリエーションがありますが、私の状況ではこれを機能させるのに苦労しています。ユーザーがコンボボックスを選択するとイベントが発生するアプリケーションがあります。それはデータベースからもデータを取得し、そのデータを UI にバインドしたいと考えています。バインディングを正しく設定したと思っていましたが、何も起こりません。すべてのコード計算が正しく実行されていることを確認できますが、バインディングに関するフィードバックは見られません。私はWPFにかなり慣れていないので、まだ頭を包み込もうとしています(私はMVC Webの世界から来ました)ので、どんなポインタでも大歓迎です。ありがとう。

メインウィンドウ コードビハインド:

public MainWindow()
{
    InitializeComponent();
    DataContext = new MainWindowViewModel();
}

private void cboAllClients_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MainWindowViewModel vm = DataContext as MainWindowViewModel;
    listClient selectedClient = e.AddedItems[0] as listClient;
    Credit.Calc c = new Credit.Calc();
    c.CalcCredit(selectedClient.ClientName);
    vm.FFCredits = c.FundFamilyCredits;
    vm.FundCredits = c.FundCredits;
    DataContext = vm;
}

メイン ウィンドウ xaml (バインディングの問題と省略)

<ListBox x:Name="lbFundFamily" Width="auto" Height="auto"
         Background="Transparent" BorderThickness="0">
    <ListBox.DataContext>
        <Binding Source="FFCredits"></Binding>
    </ListBox.DataContext>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="20"></RowDefinition>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="auto"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding Path=FundFamilyName}"
                           Grid.Row="0" Grid.Column="0"
                           Background="White" FontSize="14" Foreground="Black">
                </TextBlock>
                <!--<Rectangle Width="{Binding Path=BrokerCreditList.Utilization}"
                               Height="20" Grid.Row="0" Grid.Column="1"></Rectangle>-->
                <!--<TextBlock Text="{Binding Path=BrokerCreditList.}"></TextBlock>-->
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>


MainWindowViewModel:

class MainWindowViewModel : BaseViewModel
{
    public List<listClient> AllClients { get; set; }
    public ObservableCollection<FundFamilySum> FFCredits { get; set; }
    public ObservableCollection<FundSum> FundCredits { get; set; }

    public MainWindowViewModel()
    {
        using (AgencyModelEntities db = new AgencyModelEntities())
        {
            AllClients = db.listClients.ToList();
            FFCredits = new ObservableCollection<FundFamilySum>();
            FundCredits = new ObservableCollection<FundSum>();
        }
    }
}
4

1 に答える 1

2

最初にビューが読み込まれると、ListBoxがバインドさvm.FFCreditsれます。new ObservableCollection<FundFamilySum>();

しかし、ビューは、PropertyChanged 通知が発生しない限り、FFCredits が変更されたことを認識しないため、まだ にバインドされていnew ObservableCollection<FundFamilySum>();ます。

再度設定するときに、変更が反映されることを期待していると思いますDataContext = vm。しかし、これvmはすでにDataContext.

于 2013-05-14T17:39:49.100 に答える