ListBox에서 항목을 선택하려면 두 번 클릭해야합니다. 이 선택된 항목은 항상 굵게 표시되어야합니다. SelectedItem 속성은 내가 선택한 항목으로 취급하고있는 항목을 더 이상 반영하지 않기 때문에 이전에 선택한 항목을 굵게 표시하는 데 사용했던 아래의 XAML이 더 이상 작동하지 않습니다.MVVM - 더블 클릭으로 ListBox에서 항목을 선택하고 굵게 표시
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
은 내가 MVVM과 더블 클릭을 처리하는과 뒤에와 MouseDoubleClick 이벤트 코드를 사용하여 확인이라고 결론을 내렸다 방법으로 보았다.
private void lbProfiles_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
_viewModel.SelectedProfile = ((ListBox)sender.)SelectedItem as MyProfile;
//What should go here?
}
내보기 모델은 내가 위의 방법으로 설정됩니다 생각 SelectedProfile 속성이 있습니다. 어쨌든 SelectedProfile을 XAML에 바인딩 할 것인지, 아니면 코드에서 관리해야합니까? 또한이 항목을 굵게 표시하는 가장 좋은 방법은 무엇입니까?
편집 1 :
나는 항목이 강조하지만 선택하지 않은 클릭 하나에 있도록 조금 레이첼의 대답을 조정 끝났다. 그런 식으로 뷰 모델은 SelectedItem 속성과 HighlightedItem 속성을 가질 수 있습니다.
private void ListBoxItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount < 2)
e.Handled = true;
var clickedItem = ((ContentPresenter)e.Source).Content as MyProfile;
if (clickedItem != null)
{
//Let view model know a new item was clicked but not selected.
_modelView.HighlightedProfile = clickedItem;
foreach (var item in lbProfiles.Items)
{
ListBoxItem lbi =
lbProfiles.ItemContainerGenerator.ContainerFromItem(item) as ListBoxItem;
//If item is not displayed on screen it may not have been created yet.
if (lbi != null)
{
if (item == clickedItem)
{
lbi.Background = SystemColors.ControlLightBrush;
}
else
{
lbi.Background = lbProfiles.Background;
}
}
}
}
}