![](/img/trans.png)
[英]Issue with binding custom DependencyProperty to ListView.SelectedItem
[英]Trouble in binding ListView.SelectedItem
在我的WPF
MVVM(光)的項目,我有這樣的問題:結合后ListView.SelectedItem
我的ModelView
,我試圖把它從改變ModelView
。它似乎是確定的,但沒有happend在查看:
XAML:
<ListView SelectedItem="{Binding SelectedOne}"
ItemsSource="{Binding Items}">
</ListView>
<ListView ScrollViewer.CanContentScroll="False"
ItemsSource="{Binding Items}"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
HorizontalContentAlignment="Stretch"
SelectedItem="{Binding SelectedOne, Mode=TwoWay}"
IsSynchronizedWithCurrentItem="True">
</ListView>
MOdelView:
ObservableCollection<ItemViewModel> _EAItems = new ObservableCollection<ItemViewModel>();
public ObservableObject _selectedOne;
public ObservableCollection<ItemViewModel> Items
{
get
{
return _EAItems;
}
set
{
_EAItems = value;
}
}
public ObservableObject SelectedOne
{
get { return _selectedOne; }
set
{
if(_selectedOne != value)
_selectedOne = value;
}
}
Select = new RelayCommand(() =>
{
if (qw == 15) { qw = 0; }else
SelectedOne = Items[qw];
qw++;
});
Items是ObservableCollection
。
我添加了另一個Listview
並將其綁定到相同的源。 當我在Listview
之一中更改SelctedItem
時,它顯示在另一個上,反之亦然。
我看了很多類似的解決方案,但我不知道出了什么問題:(
首先,您還應該發布ItemsSource屬性的綁定代碼。
但主要問題是您沒有在設置器中調用PropertyChanged
public ObservableObject SelectedOne
{
get { return _selectedOne; }
set
{
if(_selectedOne != value)
_selectedOne = value;
OnPropertyChanged("SelectedOne ");//<-- otherwise the view dont know that the SelectedItem changed
}
}
為了使綁定工作,您必須從SelectedOne
設置器中引發PropertyChanged事件。 定義SelectedOne
屬性的類必須實現INotifyPropertyChanged 。
不管SelectedOne
屬性的類型如何(即使它本身是ObservableObject),也必須在PropertyChanged
值更改時引發PropertyChanged
事件。
我同意克萊門斯和布萊德梅斯的看法。 唯一的事實是,SelectedOne必須與為集合設置的類相同。 對於MVVM-light庫,該方法為RaisePropertyChanged而不是OnPropertyChanged(如果您的viewModel繼承自ViewModelBase)。
如果您的源包含ItemViewModels,則應使用以下代碼:
private ItemViewModel _selectedOne;
public ItemViewModel SelectedOne
{
get { return _selectedOne; }
set
{
if(_selectedOne != value)
_selectedOne = value;
RaisePropertyChanged("SelectedOne");
}
}
您的集合不需要RaisePropertyChanged的原因是ObsvervableCollection類已經以某種方式包含它。
問候,
凱文
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.