我正在处理示例应用程序,其中我有 DataGrid,其中有 5 行和 2 列。 第二列是DataGridComboBoxColumn,表示第一列的优先级。因此,用户可以从第二列的组合框中选择5行的优先级。我们必须将包含 1 到 6 个数字的列表绑定到 DataGridComboBoxColumn。
问题是,如果选择第一个组合框 1,那么它不应该出现在其余的组合框中。其余的组合框也是如此。只要至少给我一些提示如何实现它。我正在使用 C#、WPF
提前感谢..
您可以使用数据触发器
<Style x:Key="SingleSelectionComboBoxItem" TargetType="ComboBoxItem" BasedOn="{StaticResource {x:Type ComboBoxItem}}">
<Style.Triggers>
<DataTrigger Binding="{Binding Selected}" Value="True">
<!-- Hide it -->
<Setter Property="Visibility" Value="Collapsed" />
<!-- Also prevent user from selecting it via arrows or mousewheel -->
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
所以你的组合框会像:
<ComboBox ItemContainerStyle="{StaticResource SingleSelectionComboBoxItem}" Path=Selection}" SelectionChanged="SingleSelectionComboBox_SelectionChanged" DisplayMemberPath = "Number"/>
代码隐藏:
private void SingleSelectionComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
foreach (var item in e.RemovedItems.OfType<PopolazioneCombo>())
{
item.Selected = false;
}
foreach (var item in e.AddedItems.OfType<PopolazioneCombo>())
{
item.Selected = true;
}
}
然后,您在 ViewModel 中定义了一个类,如下所示:
public class ComboBoxPopulation : INotifyPropertyChanged
{
public string Number { get; set; }
private bool selected = false;
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propName));
}
}
public bool Selected
{
get { return selezionato; }
set
{
if (selezionato != value)
{
selezionato = value;
OnPropertyChanged("Selected");
}
}
}
}
您的物品来源将是:
public ObservableCollection<ComboBoxPopulation> Selezione
{
get
{
return selezione;
}
set
{
if (selezione != value)
{
selezione = value;
OnPropertyChanged("Selezione");
}
}
}