gpt4 book ai didi

wpf - DataGrid内的Combobox,隐藏Combobox上的选定项

转载 作者:行者123 更新时间:2023-12-03 10:44:50 25 4
gpt4 key购买 nike

我想要完成的是在 DataGrid 上连续放置一个组合框。每个组合框都绑定(bind)到相同的 ItemsSource。我希望最终用户能够单击组合框中的某个项目,并且对于该特定组合框,将该项目设为选定项目。然后其余的组合框将隐藏选定的值。尽管我确实了解整个 MVVM 模式(这就是我正在使用的),但我对 XAML 还是很陌生。

XAML:

<DataGridTemplateColumn Header="Database Column" Width="150">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.DatabaseMappingFields, ElementName=Root}" DisplayMemberPath="ColumnName">
<ComboBox.Resources>
<Style TargetType="ComboBoxItem">
<Setter Property="Visibility" Value="{Binding IsSelected, Converter={StaticResource InverseBoolToVis}}"/>
</Style>
</ComboBox.Resources>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<command:EventToCommand Command="{Binding DataContext.CommandDatabaseHeaderSelected, ElementName=Root}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

C#:
SetDatabaseColumns(new List<string>()
{ "Item1", "Item2", "Item3", "Item4", "Item5", "Item6" });

public void SetDatabaseColumns(List<string> databaseColumnNames)
{
DatabaseMappingFields.Clear();
DatabaseMappingFields.Add(new DatabaseColumnsModel() { ColumnName = "<ignore>" });
foreach (var item in databaseColumnNames)
{
DatabaseMappingFields.Add(new DatabaseColumnsModel() { ColumnName = item });
}
}

public ICommand CommandDatabaseHeaderSelected
{
get
{
return _commandDatabaseHeaderSelected ??
(_commandDatabaseHeaderSelected = new RelayCommand<SelectionChangedEventArgs>(DatabaseHeaderSelected));
}
}

private void DatabaseHeaderSelected(SelectionChangedEventArgs args)
{
var selectedItem = args.AddedItems.Count >= 1
? args.AddedItems[0] as DatabaseColumnsModel
: null;
var previousItem = args.RemovedItems.Count >= 1
? args.RemovedItems[0] as DatabaseColumnsModel
: null;
var selectedFileMapping = Data.TextFileMapping.FirstOrDefault(w => w == SelectedFileMapping);

if (selectedItem == null) return;

var isSelected = IsSelectedItemEnabled(selectedItem, previousItem);
selectedItem.IsSelected = isSelected;

selectedFileMapping.DatabaseColumn = isSelected ? selectedItem : null;

if (previousItem == null) return;
previousItem.IsSelected = false;
}

public class DatabaseColumnsModel : ObservableObject
{
private string _columnName;
private bool _isSelected;
private int _index;

public int Index
{
get { return _index; }
set { Set(() => Index, ref _index, value); }
}

public string ColumnName
{
get { return _columnName; }
set { Set(() => ColumnName, ref _columnName, value); }
}

public bool IsSelected
{
get { return _isSelected; }
set { Set(() => IsSelected, ref _isSelected, value); }
}
}

最佳答案

由于我们正在制作一个桌面应用程序,并且希望我们的所有应用程序具有共同的外观和感觉,我们决定使用 WPF 和 CefSharp 并将 WPF 用作外壳,前端将基于 HTML 并使用 WPF CefSharp控件以在 WPF 内显示浏览器窗口。

关于wpf - DataGrid内的Combobox,隐藏Combobox上的选定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31322699/

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