शैली SelectedItem में ListBox पर लोड 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 जब app लोड हो रहा है, तो मैं यह चाहते हैं होना करने के लिए स्टाइल के हिसाब से.

यह महान काम करता है जब मैं app खुला और फिर एक आइटम पर क्लिक करें, लेकिन कैसे कर सकते हैं शैली पर लागू किया जाएगा ।

मैं के साथ की कोशिश की:

<Style.Triggers>
      <DataTrigger Binding="{Binding IsEnabled, RelativeSource={RelativeSource Mode=Self}}" Value="True">
            <Setter Property="Background" Value="Purple" />
      </DataTrigger>
</Style.Triggers>

लेकिन हर आइटम के ListBox सक्षम है, तो यह लागू होता है, यह हर आइटम के लिए पर लोड.

संपादित करें:

के बाद डिबगिंग एक सा है, मैंने पाया है कि बाहर स्थापित करने के लिए जब SelectedThing लोड पर, SelectedItem बनी हुई है null.

संपादित करें:

यहाँ है OnLoaded विधि में ViewModelहै , जहां मैं स्थापित कर रहा हूँ SelectedThing यदि उपयोगकर्ता का चयन किया है, जबकि यह पहले से अनुप्रयोग का उपयोग कर. उद्देश्य रखने के लिए है के चयन के बाद बंद करने और एप्लिकेशन को फिर से खोलने.

public IAsyncRelayCommand OnLoadedCommand { get; set; }

निर्माता:

OnLoadedCommand = new AsyncRelayCommand(OnLoaded);

में देखें:

<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 स्रोत संपत्ति के लिए एक मूल्य है कि में नहीं है 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ý
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में