将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();
}
}