來自新手的基本問題。我一直在堅持這一點,並已閱讀了很多關於SO的材料和幾個類似的問題;希望不是完全重複的問題。盡我所知,我簡化了代碼。爲什麼這個ListView不會隨着綁定屬性的改變而改變?
我想使ListView顯示一個過濾的ObservableCollection)屬性(作爲ItemsSource?),基於組合框中的選擇。 具體而言,哪些「會議」具有與此相關的「協調員」。
我在運行時看不到任何輸出數據錯誤,調試顯示屬性正確更新,但ListView保持空白。我試圖避免視圖上的任何代碼隱藏,目前沒有任何代碼隱藏。
謝謝!
public class ViewModel : INotifyPropertyChanged
{
private ObservableCollection<Meeting> meetings;
public ObservableCollection<Meeting> Meetings
{
get
{
return meetings;
}
set
{
meetings = value;
OnPropertyChanged("ListProperty");
OnPropertyChanged("Meetings");
}
}
private string coordinatorSelected;
public string CoordinatorSelected
{
get
{
return coordinatorSelected;
}
set
{
coordinatorSelected = value;
Meetings = fakeDB.Where(v => v.CoordinatorName == CoordinatorSelected) as ObservableCollection<Meeting>;
}
}
private ObservableCollection<string> comboProperty = new ObservableCollection<string> { "Joe", "Helen", "Sven" };
public ObservableCollection<string> ComboProperty
{
get
{
return comboProperty;
}
}
private ObservableCollection<Meeting> fakeDB = new ObservableCollection<Meeting>() { new Meeting("Joe", "Atlas"), new Meeting("Sven", "Contoso"), new Meeting("Helen", "Acme") };
public ObservableCollection<Meeting> ListProperty
{
get
{
return Meetings;
}
}
public class Meeting
{
public string CoordinatorName { get; set; }
public string ClientName { get; set; }
public Meeting(string coordinatorName, string clientName)
{
CoordinatorName = coordinatorName;
ClientName = clientName;
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
XAML:
<Window.Resources>
<local:ViewModel x:Key="VM"></local:ViewModel>
</Window.Resources>
<DockPanel DataContext="{StaticResource ResourceKey=VM}">
<ComboBox Margin="10" ItemsSource="{Binding ComboProperty}" SelectedItem="{Binding CoordinatorSelected}" DockPanel.Dock="Top"/>
<ListView Margin="10" ItemsSource="{Binding ListProperty, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="ClientName"/>
</DockPanel>
更新:
這似乎表明,拉姆達返回一個會議對象,但分配給會議失敗。這可能是鑄造中的錯誤嗎?
再次感謝。
選項這裏不需要,只使用源工程 - '的ItemsSource = 「{結合的ListProperty,UpdateSourceTrigger =的PropertyChanged}」' – gnivler
注意,'UpdateSourceTrigger = PropertyChanged'對單向綁定沒有影響。它控制TwoWay或OneWayToSource綁定如何更新其源屬性。 – Clemens