스타일을 선택한항목 목록 상자에서 부하에 따라 WPF

0

질문

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 부하, SelectedItemnull.

편집:

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;
    }
}
c# listbox mvvm wpf
2021-11-23 14:48:35
1

최고의 응답

2

이유 없 선택된 항목이 있기 때문에 설정 SelectedThing source 속성 값지 ViewModels 원본 컬렉션입니다.

당신이 이미 발견했다는 이 작품을 더 나은:

var selectedViewModel = ViewModels.Where(x => x.SelectedThing == selected.SelectedThing).FirstOrDefault();
SelectedThing = selectedViewModel;

항목을 선택할 수 있어야 합 소스에서 컬렉션입니다.

2021-11-24 15:36:53

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................