如何将数字绑定到 DataGridComboBoxColumn,而不会在 WPF 中出现重复的值



我正在处理示例应用程序,其中我有 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");
            }
        }
    }

最新更新