Как обновить свойство элемента коллекции, которое не имеет привязанного элемента управления в xaml? - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть коллекция предметов, скажем:

 class Myclass : INotifyPropertyChanged
 {
     public bool Selected { get; set; }
     public string ChosenValue { get; set; }
 }

У меня есть наблюдаемая коллекция этого класса:

 public ObservableCollection<Myclass> _myObColl

Наконец, у меня есть список, связанный с_myObColl и отдельный выпадающий список, связанный с другой коллекцией.

Я хочу обновить поле со списком, чтобы обновить свойство ChosenValue всех элементов в списке _myObColl.Но я не могу понять, как.

Выбранный элемент поля со списком привязан к свойству в модели представления, называемому currselection.Что я хочу сделать, это связать свойство ChosenValue Myclass со значением currselection.Но как мне это сделать?Возможно, мне не следует думать о связывании, но я не могу придумать другой способ обновления свойства ChosenValue элементов.Я попытался SelectionChanged событие комбо, чтобы пройти через _myObColl.Это работает, за исключением случаев, когда элемент помечен как выбранный после изменения комбинированного списка.

<ComboBox ItemsSource="{Binding Path=DataContext.lstComboList , ElementName=PS4}" SelectedItem="{Binding Path=currselection, Mode=TwoWay}" Margin="10,10,10,10" Width="100"/>
     <ListBox ItemsSource="{Binding _myObColl}" Margin="10,10,0,0" >
            <ListBox.ItemTemplate x:Uid="asdasd"  >
                <DataTemplate>
                     <Grid>
                        <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>         
                        <CheckBox Grid.Column ="3" Width="50" VerticalAlignment="Center" Margin="10"  IsChecked="{Binding Path=PropA, Mode=TwoWay}"/>
                    </Grid>
                 </DataTemplate>
             </ListBox.ItemTemplate>
    </ListBox>

1 Ответ

1 голос
/ 22 сентября 2019

Если вы хотите, чтобы поле со списком изменило значение выбранного элемента в списке, вы можете привязать SelectedItem следующим образом.

<ComboBox ItemsSource="{Binding ComboList}" SelectedItem="{Binding ElementName=listBox, Path=SelectedItem.ChosenValue}" />

В противном случае, если вы действительно хотите изменить свойство всехэлементы в списке при изменении поля со списком, вам нужно будет сделать это в коде позади, в установщике свойств.

<ComboBox ItemsSource="{Binding ComboList}" SelectedItem="{Binding SelectedValue}"/>

в ViewModel

private string _SelectedValue;
public string SelectedValue
{
    get => _SelectedValue;
    set
    {
        _SelectedValue = value;
        foreach (var item in MyObColl.ToList()) item.ChosenValue = _SelectedValue;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...