1

ComboboxUserControl. 是否可以设置这些按钮以Combobox直接在 XAML 中更改所选索引?

我通过两种方法做到了这一点:

代码隐藏

 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是否存在(如果没有则禁用)。我认为这可以通过命令验证来完成,但对我来说看起来很困难,因为我是这个世界的新手。这也可以通过代码隐藏来完成,但我想避免它。(就像定义一个绑定到那个的 bool 属性Checkbox,就像写这样的东西if(myItems.Count==0)

4

2 回答 2

2

我宁愿将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");
}

这消除了对额外转换器的需要。

于 2013-06-09T15:20:56.357 回答
2

对于复选框问题,它属于将数量转换为布尔值的一般问题。规范的 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 开发人员提供帮助。

于 2013-06-09T15:17:46.533 回答