2011-06-24 56 views
4

我在DataForm中有幾個ComboBoxes ,並且正在嘗試使其具有某種組合框,直到選中某個ComboBox爲止。爲此,我創建了一個名爲在綁定到DataContext類CanEditCombo通知物業和配置我的組合框,如下所示:ComboBox IsEnabled綁定在DataForm中不起作用

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

CanEditCombo最初是假的,但我的組合框是可編輯的數據形首次加載。

如果我將相同的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> 

更重要的是,即使我硬編碼組合框的IsEnabled屬性設爲False在ComboBox上面的標記仍然是可編輯的。

當ComboBox在DataForm中時,如何通過綁定語法設置ComboBox的IsEnable屬性?

回答

2

不知道你是否已經發現了答案,但實際上有一個非常簡單的解決方案:在DataField上設置IsEnabled,而不是在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屬性永遠不會在嵌套控件上被訪問。

+0

我放棄了這個方法,走了另一條路。但我會將你的答案標記爲「答案」,因爲這聽起來像是一個可行的選擇。 –

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; 
    } 
} 
+0

@HitTech:上述工作對我來說沒有錯,但在我的情況下,ComboBox **是在DataForm **中。我已經更新了我的答案,以包含更多的XAML。您是否能夠在DataForm **中獲得上述工作**? –

相關問題