我在DataForm 中有几个ComboBox ,我试图让它在某个ComboBox被选中之前禁用某些ComboBox。为此,我在类中创建了一个名为CanEditCombo
的通知属性,该属性绑定到DataContext并配置了我的ComboBoxes,如下所示:
<ComboBox ... IsEnabled="{Binding CanEditCombo, Mode=OneWay}" />
CanEditCombo
最初是假的,但是当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
属性?
答案 0 :(得分:2)
不确定您是否已经找到了答案,但实际上有一个非常简单的解决方案:在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属性。
答案 1 :(得分:0)
以下是我可以制作的最简单的模型,以表明它应该可行。该复选框非常愉快地切换组合框的启用状态。
请查找可能解释您的工作原因(或发布更多代码和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;
}
}