为了账号安全,请及时绑定邮箱和手机立即绑定

如何更新 xaml 中没有绑定控件的集合项属性?

如何更新 xaml 中没有绑定控件的集合项属性?

C#
函数式编程 2023-12-17 16:48:52
我有一系列物品,例如: class Myclass : INotifyPropertyChanged {     public bool Selected { get; set; }     public string ChosenValue { get; set; } }然后我就有了这个类的可观察集合: public ObservableCollection<Myclass> _myObColl最后,我有一个绑定到 _myObColl 的列表框和一个绑定到另一个集合的单独组合框。我想要更新组合框以更新 _myObColl 列表中所有项目的 ChosenValue 属性。但我不知道怎么做。组合框选定的项目绑定到视图模型中名为 currselection 的属性。我想要做的是将 Myclass 的 ChosenValue 属性绑定到 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 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

如果您希望组合框更改列表框中所选项目的值,您可以像这样绑定 SelectedItem。


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

否则,如果您确实想在组合框更改时更改列表中所有项目的属性,则需要在属性设置器中的代码后面执行此操作。


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

在视图模型中


private string _SelectedValue;

public string SelectedValue

{

    get => _SelectedValue;

    set

    {

        _SelectedValue = value;

        foreach (var item in MyObColl.ToList()) item.ChosenValue = _SelectedValue;

    }

}


查看完整回答
反对 回复 2023-12-17
  • 1 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信