Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将ComboBoxItem绑定到WPF中的命令?_Wpf - Fatal编程技术网

将ComboBoxItem绑定到WPF中的命令?

将ComboBoxItem绑定到WPF中的命令?,wpf,Wpf,我希望有一个,其中ItemsSource绑定到某个ViewModel集合,但我希望第一个绑定到ICommand属性,并将其命名为(例如)“将新元素添加到集合…”。 有什么建议吗 您可以这样做: 在视图模型中,您有命令和要设置为项目资源的项目集合: public class MainWindowViewModel : INotifyPropertyChanged { public MainWindowViewModel() { Items = new Observa

我希望有一个
,其中ItemsSource绑定到某个ViewModel集合,但我希望第一个
绑定到
ICommand
属性,并将其命名为(例如)“将新元素添加到集合…”。 有什么建议吗

您可以这样做:

在视图模型中,您有
命令
和要设置为
项目资源的
项目
集合:

public class MainWindowViewModel : INotifyPropertyChanged
{
    public MainWindowViewModel()
    {
        Items = new ObservableCollection<string>()
        {
            "John Doe",
            "Lara Croft",
            "Sam Fisher"
        };

        AddNewItemCommand = new DelegateCommand(OnAddNewItem);
    }

    private void OnAddNewItem()
    {
        Items.Add("New Item");
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private ObservableCollection<string> _items;
    public ObservableCollection<string> Items
    {
        get { return _items; }
        set
        {
            _items = value;
            NotifyPropertyChanged(nameof(Items));
        }
    }

    public ICommand AddNewItemCommand { get; set; }

    [NotifyPropertyChangedInvocator]
    protected virtual void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
并创建
行为
以禁止选择第一个项目,即“添加新项目”项目:

public类UnselectableComboBoxItemBehavior:Behavior
{
受保护的覆盖无效附加()
{
base.onatached();
AssociatedObject.PreviewMouseDown+=AssociatedObjectOnPreviewMouseDownAndMouseLeftButtonUp;
AssociatedObject.PreviewMouseLeftButtonUp+=AssociatedObjectOnPreviewMouseDownAndMouseLeftButtonUp;
}
private void Associated ObjectonPreviewMouseDownandMouseLeftButtonUp(对象发送者,MouseButtonEventArgs e)
{
如果(e.Source==发送方)
{
e、 已处理=正确;
}
}
附加时受保护的覆盖无效()
{
AssociatedObject.PreviewMouseDown-=AssociatedObjectOnPreviewMouseDownAndMouseLeftButtonUp;
AssociatedObject.PreviewMouseLeftButtonUp-=AssociatedObjectOnPreviewMouseDownAndMouseLeftButtonUp;
base.OnDetaching();
}
}
结果:

您可以这样做:

在视图模型中,您有
命令
和要设置为
项目资源的
项目
集合:

public class MainWindowViewModel : INotifyPropertyChanged
{
    public MainWindowViewModel()
    {
        Items = new ObservableCollection<string>()
        {
            "John Doe",
            "Lara Croft",
            "Sam Fisher"
        };

        AddNewItemCommand = new DelegateCommand(OnAddNewItem);
    }

    private void OnAddNewItem()
    {
        Items.Add("New Item");
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private ObservableCollection<string> _items;
    public ObservableCollection<string> Items
    {
        get { return _items; }
        set
        {
            _items = value;
            NotifyPropertyChanged(nameof(Items));
        }
    }

    public ICommand AddNewItemCommand { get; set; }

    [NotifyPropertyChangedInvocator]
    protected virtual void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
并创建
行为
以禁止选择第一个项目,即“添加新项目”项目:

public类UnselectableComboBoxItemBehavior:Behavior
{
受保护的覆盖无效附加()
{
base.onatached();
AssociatedObject.PreviewMouseDown+=AssociatedObjectOnPreviewMouseDownAndMouseLeftButtonUp;
AssociatedObject.PreviewMouseLeftButtonUp+=AssociatedObjectOnPreviewMouseDownAndMouseLeftButtonUp;
}
private void Associated ObjectonPreviewMouseDownandMouseLeftButtonUp(对象发送者,MouseButtonEventArgs e)
{
如果(e.Source==发送方)
{
e、 已处理=正确;
}
}
附加时受保护的覆盖无效()
{
AssociatedObject.PreviewMouseDown-=AssociatedObjectOnPreviewMouseDownAndMouseLeftButtonUp;
AssociatedObject.PreviewMouseLeftButtonUp-=AssociatedObjectOnPreviewMouseDownAndMouseLeftButtonUp;
base.OnDetaching();
}
}
结果:


不错。但现在我想知道,是否有可能将其包含到一些可重用的UserControl中?我喜欢:?很好。但现在我想知道,是否有可能将其包含到一些可重用的UserControl中?Smth像:?
public class UnselectableComboBoxItemBehavior : Behavior<ComboBoxItem>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.PreviewMouseDown += AssociatedObjectOnPreviewMouseDownAndMouseLeftButtonUp;
        AssociatedObject.PreviewMouseLeftButtonUp += AssociatedObjectOnPreviewMouseDownAndMouseLeftButtonUp;
    }

    private void AssociatedObjectOnPreviewMouseDownAndMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        if (e.Source == sender)
        {
            e.Handled = true;
        }
    }

    protected override void OnDetaching()
    {
        AssociatedObject.PreviewMouseDown -= AssociatedObjectOnPreviewMouseDownAndMouseLeftButtonUp;
        AssociatedObject.PreviewMouseLeftButtonUp -= AssociatedObjectOnPreviewMouseDownAndMouseLeftButtonUp;
        base.OnDetaching();
    }
}