나 ListBox
이와 같:
<ListBox
//other stuff
ItemsSource="{Binding ViewModels, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding SelectedThing, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Purple" />
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
ViewModel.cs:
public SomeType SelectedThing
{
get => selectedThing;
set => //set with INotifyPropertyChanged
}
public ObservableCollection<SomeType> ViewModels
{
get => viewModels;
set => //set with INotifyPropertyChanged
}
가능성 SelectedThing
에서 정의 ViewModel
응용 프로그램을 로드할 때,그래서 내가 원하는 스타일이다.
그것은 좋은 작품을 할 때 나는 응용 프로그램을 열고 다음 항목을 클릭하지만,어떻게 스타일에 적용되는 컴퓨터가 더 빨리 만들 수 있습니다.
으로했:
<Style.Triggers>
<DataTrigger Binding="{Binding IsEnabled, RelativeSource={RelativeSource Mode=Self}}" Value="True">
<Setter Property="Background" Value="Purple" />
</DataTrigger>
</Style.Triggers>
그러나 모든 항목의 ListBox
은 사용하도록 설정되어 있으므로 적용되는 모든 품목에 따라 load.
편집:
후에는 디버깅,조금 나는 것을 발견 할 때 설정 SelectedThing
부하, SelectedItem
남 null
.
편집:
기 OnLoaded
방법 ViewModel
가 설정 SelectedThing
는 경우 사용자가 선택한 그는 동안 이전에 응용 프로그램입니다. 목적을 유지하는 선택을 닫은 후 다시 열니다.
public IAsyncRelayCommand OnLoadedCommand { get; set; }
에서 생성자:
OnLoadedCommand = new AsyncRelayCommand(OnLoaded);
에 View:
<b:Interaction.Triggers>
<b:EventTrigger EventName="Loaded">
<b:InvokeCommandAction Command="{Binding OnLoadedCommand}" />
</b:EventTrigger>
</b:Interaction.Triggers>
실제방법:
public async Task OnLoaded()
{
//other stuff
if (App.Current.Properties.Contains(nameof(SelectedThing)))
{
var selected = JsonConvert.DeserializeObject<SomeType>(App.Current.Properties[nameof(SelectedThing)].ToString());
SelectedThing = selected;
}
}