Em đang sử dụng Caliburn&Micro lib để học mô hình MVVM, và em gặp phải một số vấn đề về binding, cụ thể là như sau ạ:
Code xaml
<ComboBox x:Name="Playlist"
IsSynchronizedWithCurrentItem="True"
SelectedItem="{Binding SelectedSong,Mode=OneWayToSource}"
DisplayMemberPath="Playlist"/>
<ListBox ItemContainerStyle="{DynamicResource StyleItems}"
Grid.Column="1"
x:Name="Playlist"
ItemsSource="{Binding ElementName=Playlist,Path=SelectedItem,Mode=OneWayToSource}"
SelectedItem="{Binding SelectedSong,Mode=OneWayToSource}"
Grid.RowSpan="2">
<ListBox.ItemTemplate>
<DataTemplate >
<Grid Height="50">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="4*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Image Stretch="Uniform" Source="{Binding SelectedSong_URL,Mode=OneWayToSource}"
Grid.Column="0"/>
<TextBlock Grid.Column="1" Foreground="AliceBlue"
FontWeight="DemiBold"
Text="{Binding SelectedSong_Title,Mode=OneWayToSource}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
ViewModel
public class MainViewModel : Screen
{
Resource resource = new Resource();
public MainViewModel()
{
resource.AddDataDefault(Playlist);
}
private Song _selectedSong;
private BindableCollection<Song> _playlist = new BindableCollection<Song>();
public BindableCollection<Song> Playlist
{
get { return _playlist; }
set
{
_playlist = value;
NotifyOfPropertyChange(() => Playlist);
NotifyOfPropertyChange(() => SelectedSong);
}
}
public Song SelectedSong
{
get { return _selectedSong; }
set
{
_selectedSong = value;
NotifyOfPropertyChange(() => SelectedSong);
NotifyOfPropertyChange(() => Playlist);
}
}
Model
public class Song
{
public Song(string? playlist, string title, string? musicurl)
{
Playlist = playlist;
Title = title;
URL = musicurl;
}
public string? Playlist { get; set; }
public string Title { get; set; }
public string? URL { get; set; }
}
Em đã thử chạy nó nhưng kết quả chỉ có combobox là nhận giá trị binding còn listbox thì không thể. Làm sao để khắc phục lỗi này ạ ??
Mong mọi người giúp đỡ ạ