[英]WPF Data Binding with multiple controls
在WPF中,我試圖綁定多個控件,但是當第一個控件更改時,第二個控件沒有更改。
我有兩個類:Task類和Log類,它們作為一個集合存儲在Task類中。 下面的列表框綁定到任務以及所選任務的內部日志。
問題在於,列表框在第一次加載時就可以很好地填充,但是如果我選擇其他任務,我希望日志將更新為新任務的集合,但與原始任務相比不會發生變化首次加載時選擇的任務。 我想念什么?
在設計器中:
<ListBox x:Name="listBoxTasks" ItemsSource="{Binding}" DisplayMemberPath="Key"
Grid.Row="0" Grid.Column="0" Grid.RowSpan="2">
</ListBox>
<ListBox x:Name="listBoxLogs"
ItemsSource="{Binding Logs}" DisplayMemberPath="EntryDate"
Grid.Row="1" Grid.Column="1">
</ListBox>
在后面的代碼中:
public MainWindow()
{
InitializeComponent();
IMongoCollection<Task> tasks = DataManager.GetData();
this.DataContext = tasks.AsQueryable();
}
Task類:
public class Task : BusinessBase<Task>
{
public ObjectId _Id { get; set; }
public string Key { get; set; }
public string Description { get; set; }
public string Summary { get; set; }
public string Details { get; set; }
public IEnumerable<Log> Logs { get; set; }
public IEnumerable<Link> Links { get; set; }
public IEnumerable<String> RelatedKeys { get; set; }
public IEnumerable<TaskItem> Items { get; set; }
}
您的Task
類需要實現INotifyPropertyChanged接口,以便一旦基礎數據發生任何變化,它就可以告訴WPF UI某些更改現在可以再次更新/刷新控件。
您的任務類需要實現INotifyPropertyChanged
您必須將第一個ListBox
SelectedItem
綁定到Task
模型的對象,並為SelectionChanged
添加事件處理程序。 在此事件內,您必須通過選定的Task模型填充日志,還必須在類中實現INotifyPropertyChanged
。
在我看來,第二個綁定根本不起作用,因為DataContext
是Tasks
的可枚舉對象,而該可枚舉對象本身沒有稱為Logs
屬性。 您可以嘗試使用IsSynchronizedWithCurrentItem
以及對當前項目的綁定:
<ListBox x:Name="listBoxTasks" ItemsSource="{Binding}" DisplayMemberPath="Key"
Grid.Row="0" Grid.Column="0" Grid.RowSpan="2"
IsSynchronizedWithCurrentItem="True"> <!-- Set this -->
</ListBox>
<ListBox x:Name="listBoxLogs" DisplayMemberPath="EntryDate"
Grid.Row="1" Grid.Column="1"
ItemsSource="{Binding /Logs}"> <!-- Note the slash which indicates a binding to the current item -->
</ListBox>
您還可以綁定到另一個ListBox
的SelectedItem
,但這在控件之間引入了冗余依賴關系。 還要注意,如果更改數據對象中的任何屬性,則需要實現其他應答者INotifyPropertyChanged
提到的接口。
我已經全部工作了。 我實現了INotifyPropertyChanged,盡管那不能解決問題。
我現在正在使用MVVM模式。 這有幫助...我正在使用的NoRM庫沒有SelectionChanged事件。 我創建了一個視圖模型,並能夠將這些模型轉換為ObservableCollections。 現在,我只是在為Task類更改選擇時設置Logs控件DataContext。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.