XAML中的组合框选择更改
本文关键字:选择 组合 XAML | 更新日期: 2023-09-27 18:17:29
我有一个Combobox
和两个按钮在我的UserControl
。是否可以设置这些按钮直接在XAML中更改Combobox
的选定索引?
我已经通过两种方法做到了这一点:
后台代码
private void nextBut_Click(object sender, RoutedEventArgs e)
{
combo.SelectedIndex++;
}
private void prevBut_Click(object sender, RoutedEventArgs e)
{
combo.SelectedIndex--;
}
或者通过将命令绑定到这些按钮并在我的ModelView
中定义该命令。
我有另一个关于XAML的问题,我真的不知道是问一个不同的问题,还是利用这个机会,你已经读到我了!我相信它必须是直接的(至少对于这里的WPF大师):
我有一个ItemsControl
持有UserControl
,但可能有几个或没有(因为你可以创建更多,或删除)。我想要一个Checkbox
外部是否启用取决于我的ItemsContol
中是否有元素(如果没有则禁用)。我认为这可以用命令验证来完成,但对我来说很难,因为我是这个世界的新手。这也可以用代码隐藏来完成,但我想避免它。(比如定义一个绑定到Checkbox
的bool属性,如if(myItems.Count==0)
我宁愿将SelectedItem
属性绑定到ViewModel中的一些属性,并将这些按钮绑定到ViewModel中的一些命令。这种方式将状态数据(selectedItem)保存在ViewModel中,并且可以使用它来执行任何所需的附加逻辑,从而消除了对后台代码的需求。
对于CheckBox,我宁愿在ViewModel中放置一个bool属性,并在添加/删除项时通知它。
public bool HasItems {get {return Items.Any(); } }
public void AddItem()
{
//...Add Items
NotifyPropertyChanged("HasItems");
}
public void RemoveItem()
{
//...Remove Item
NotifyPropertyChanged("HasItems");
}
对于复选框问题,它属于将数量转换为bool值的一般问题。一个规范的WPF答案是将复选框IsChecked属性绑定到集合,并通过IValueConverter将其路由。这里有一个转换器,可以做到这一点…
public class QuantityToBoolConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
try
{
IEnumerable items = value as IEnumerable;
if (items != null)
{
return items.OfType<object>().Any();
}
}
catch
{
return value;
}
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
return null;
}
}
要部署它,您需要在Xaml中将其声明为资源…
<Window.Resources>
<converters:QuantityToBoolConverter x:Key="QuantityToBoolConverter"/>
</Window.Resources>
然后将IsChecked属性绑定到你的项目,并声明转换器…
<ListBox Name="mylb">
</ListBox>
<CheckBox IsChecked="{Binding ElementName=mylb, Path=ItemsSource, Converter={StaticResource
QuantityToBoolConverter}}"></CheckBox>
对于组合框SelectedIndex问题,您可以查看CollectionViewSource文档。在这里,你可以在ViewModel中操作它来移动当前选择。并且有大量的示例代码需要检查。了解ICollectionView将为WPF开发人员提供良好的服务。