【问题标题】:ComboBox IsEnabled binding in a DataForm not workingDataForm 中的 ComboBox IsEnabled 绑定不起作用
【发布时间】:2011-06-24 04:31:43
【问题描述】:

我有几个 ComboBoxes 在一个 DataForm 中,我正在尝试使用它,以便在选择特定 ComboBox 之前禁用某些 ComboBoxes。为此,我在绑定到 DataContext 的类中创建了一个名为 CanEditCombo 的通知属性,并像这样配置了我的 ComboBoxes:

<ComboBox ... IsEnabled="{Binding CanEditCombo, Mode=OneWay}" />

CanEditCombo 最初为 false,但当 DataForm 首次加载时,我的 ComboBox 是可编辑的。

如果我将相同的 IsEnabled 绑定语法应用到我的 DataForm 中的 TextBox,它会按预期工作:起初禁用,但一旦 CanEditCombo 变为 true 就启用。

这是 XAML 的示例块:

<toolkit:DataForm CurrentItem="{Binding NewProject, Mode=TwoWay}" x:Name="dfNewProject" CommandButtonsVisibility="None">
    <toolkit:DataForm.EditTemplate>
        <DataTemplate>
            <StackPanel>
                ...

                <toolkit:DataField>
                    <ComboBox ItemsSource="{Binding ProjectOptions, Mode=OneWay}"
                                SelectedValue="{Binding Options, Mode=TwoWay}"
                                DisplayMemberPath="Value"
                                SelectedValuePath="Key"
                                IsEnabled="{Binding CanEditCombo, Mode=OneWay}" />
                </toolkit:DataField>

                ...
            </StackPanel>
        </DataTemplate>
    </toolkit:DataForm.EditTemplate>
</toolkit:DataForm>

更重要的是,即使我在 ComboBox 上方的标记中将 ComboBox 的 IsEnabled 属性硬编码为 False,仍然是可编辑的。

当 ComboBox 在 DataForm 中时,如何通过绑定语法设置 ComboBox 的 IsEnable 属性?

【问题讨论】:

    标签: silverlight combobox dataform


    【解决方案1】:

    不确定您是否找到了答案,但实际上有一个非常简单的解决方案:在 DataField 而不是 ComboBox(或任何其他 DataField 嵌套控件)上设置 IsEnabled。

    <toolkit:DataField IsEnabled="{Binding CanEditCombo, Mode=OneWay}">
         <ComboBox ItemsSource="{Binding ProjectOptions, Mode=OneWay}"
                   SelectedValue="{Binding Options, Mode=TwoWay}"
                   DisplayMemberPath="Value"
                   SelectedValuePath="Key" />
    </toolkit:DataField>
    

    我不确定 DataField 在内部到底在做什么,但 IsEnabled 属性永远不会在嵌套控件上被访问。

    【讨论】:

    • 我放弃了这种方法,走了一条不同的路线。但我会将您的答案标记为“最佳”答案,因为这听起来像是一个可行的选择。
    【解决方案2】:

    以下是我可以制作的最简单的模型,以表明它应该可以工作。该复选框非常愉快地切换了组合框的启用状态。

    请寻找任何可能解释您为什么不工作的差异(或发布更多代码和 XAML)

    XAML:

    <UserControl x:Class="ComboDemo.ComboEnabledTest"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">
    
        <StackPanel x:Name="LayoutRoot" Background="White">
            <ComboBox IsEnabled="{Binding CanEdit, Mode=OneWay}" Height="23" Width="120" />
            <ComboBox IsEnabled="{Binding CanEdit, Mode=OneWay}" Height="23" Width="120" />
            <CheckBox IsChecked="{Binding CanEdit, Mode=TwoWay}" Content="Toggle CanEnable" Height="16" />
        </StackPanel>
    </UserControl>
    

    后面的代码:

    using System.Windows.Controls;
    
    namespace ComboDemo
    {
        public partial class ComboEnabledTest : UserControl
        {
            public ComboEnabledTest()
            {
                InitializeComponent();
                this.DataContext = new TestViewModel();
            }
        }
    }
    

    查看模型:

    using System.ComponentModel;
    
    namespace ComboDemo
    {
        public class TestViewModel : INotifyPropertyChanged
        {
            private bool _canEdit;
            public bool CanEdit
            {
                get { return _canEdit; }
                set
                {
                    if (_canEdit != value)
                    {
                        _canEdit = value;
                        if (this.PropertyChanged != null)
                        {
                            PropertyChanged(this, new PropertyChangedEventArgs("CanEdit"));
                        }
                    }
                }
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
        }
    }
    

    【讨论】:

    • @HitTech:以上内容对我来说没有错,但在我的场景中,ComboBox 在 DataForm 中。我已更新我的答案以包含更多 XAML。您是否能够在 DataForm 中使用上述内容?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2021-05-19
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2015-11-16
    相关资源
    最近更新 更多