2013-05-14 27 views
0

我已經看到這個請求的細微變化 - 但我很難讓這個工作適合我的情況。我有一個應用程序,用戶選擇一個組合框將驅動一個事件。這甚至從數據庫中獲取數據,我想將這些數據綁定到UI。我以爲我的綁定設置了正確性,但我什麼也得不到。我可以看到我所有的代碼計算正確啓動,但我沒有看到任何關於綁定的反饋。我對WPF很陌生,仍然試圖圍繞它(我來自MVC網絡世界),所以任何指針都非常感謝。謝謝。在WPF中綁定我改變的數據上下文

主窗口後面的代碼:

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>(); 
     } 
    } 
} 
+0

我想你錯誤地轉發了你的xaml代碼作爲mainviewmodel,你能否更新它? – Silvermind 2013-05-14 17:28:47

+0

刪除SelectionChanged事件並將'ComboBox'的'SelectedItem'屬性綁定到ViewModel中的某些相關屬性。 MVVM通過使用簡單的綁定和INotifyPropertyChanged消除了大多數UI事件的需要。 – 2013-05-14 17:28:52

+0

您的MainWindowViewModel看起來像XAML。它不應該是C#嗎? – 2013-05-14 17:29:20

回答

2

最初,當所述視圖被加載,ListBox其中必然有vm.FFCreditsnew ObservableCollection<FundFamilySum>();

但是該視圖並不知道FFCredits已更改,除非發生PropertyChanged通知,因此它仍然綁定到new ObservableCollection<FundFamilySum>();

我想你會希望在你再次設置DataContext = vm時能夠找到變化。但這不會工作,因爲vm已經是DataContext

+0

謝謝@cheedep。我正在研究爲viewmodel實現inotifyproperty。要找到一篇好文章。再次感謝。 – user576838 2013-05-14 17:41:06

+0

如果它不在那裏,你可以在你的BaseViewModel中實現它,如果是的話,你所需要做的就是提高PropertyChanged – cheedep 2013-05-14 17:43:38