gpt4 book ai didi

c# - 从列表框中获取选中的项目

转载 作者:行者123 更新时间:2023-12-03 10:56:38 27 4
gpt4 key购买 nike

我刚刚习惯了 MVVM 并且想要不使用代码隐藏并在 View 模型中定义所有内容。
组合框代表几个选择选项(作品)。我想查询已检查的元素。
不幸的是,我无法访问它们。文本框应将所有选定元素显示为连接字符串。

查看-型号

class MainViewModel : BaseViewModel
{
#region Fields

private ObservableCollection<EssayTypeViewModel> _essayTypes;
private EssayTypeViewModel _selectedEssayTypes;

#endregion


public ObservableCollection<EssayTypeViewModel> EssayTypes
{
get => _essayTypes;
set
{
if (_essayTypes == value) return;
_essayTypes = value; OnPropertyChanged("EssayTypes");
}
}


public EssayTypeViewModel SelectedEssayTypes
{
get => _selectedEssayTypes;
set { _selectedEssayTypes = value; OnPropertyChanged("SelectedEssayTypes"); }
}


public MainViewModel()
{

// Load Essay Types
EssayTypeRepository essayTypeRepository = new EssayTypeRepository();
var essayTypes = essayTypeRepository.GetEssayTypes();
var essayTypeViewModels = essayTypes.Select(m => new EssayTypeViewModel()
{
Text = m.Text
});

EssayTypes = new ObservableCollection<EssayTypeViewModel>(essayTypeViewModels);

}
}

XAML
<ListBox x:Name="Listitems" SelectionMode="Multiple" Height="75" Width="200" ItemsSource="{Binding EssayTypes}" >
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Text}" IsChecked="{Binding Checked}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

<TextBox Text="{Binding Path=SelectedEssayTypes}" Grid.Column="0" Width="160" Height="25" Margin="0,140,0,0"/>

最佳答案

您可以将事件处理程序连接到 PropertyChanged所有事件EssayTypeViewModel EssayTypes 中的对象收集和提高PropertyChanged MainViewModel 的只读属性的事件将所有选定元素作为连接字符串返回:

public MainViewModel()
{
// Load Essay Types
EssayTypeRepository essayTypeRepository = new EssayTypeRepository();
var essayTypes = essayTypeRepository.GetEssayTypes();
var essayTypeViewModels = essayTypes.Select(m =>
{
var vm = EssayTypeViewModel()
{
Text = m.Text
};
vm.PropertyChanged += OnPropertyChanged;
return vm;
});

EssayTypes = new ObservableCollection<EssayTypeViewModel>(essayTypeViewModels);
}

private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "Checked")
OnPropertyChanged("SelectedItems");
}

public string SelectedItems => string.Join(",", EssayTypes.Where(x => x.Checked).ToArray());

这需要 EssayTypeViewModel 类来实现 INotifyPropertyChanged接口(interface)(例如从你的 BaseViewModel 类派生)。

关于c# - 从列表框中获取选中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54089631/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com