2014-10-02 5 views
0

У меня есть элемент управления, который требует использования флажка, чтобы включить отключить разделы, но мне нужно привязать это к классу. Итак, я сделал следующее. Итак, мой вопрос заключается в том, как установить привязку к словам, например, IncidentBuilderProperty.IsEnabled, должен ли я сделать код с использованием параметра.Как решить проблемы с привязкой

<DockPanel DockPanel.Dock="Top" > 
    <Label Content="Display" /> 
    <CheckBox Name="chkDisplayAdvanced" IsThreeState="False" VerticalAlignment="Center" 
      IsChecked="{Binding isEnabled, Mode=TwoWay}" /> 
</DockPanel> 

Но в моей модели у меня есть свойство isEnabled Объявлено следующим образом.

Так что мой вопрос в том, как я могу получить доступ к свойству IncidentBuilderProperty.isEnabled в виду, что это экран для каждого свойства с этим флажком на нем, но ссылающийся на один настраиваемый элемент управления.

public class AssignedToMeViewData : WizardData, INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    public ManagementPack ManagmentPack { get; set; } 
    public List<BuilderProperties> BuilderProperty { get; set; } 
    public BuilderProperties GeneralPage { get; set; } 
    public Exception LastKnownException { get; set; } 
    [DefaultValue(true)] 
    public bool IsNew { get; set; } 

    public BuilderProperties IncidentBuilderProperty { get; set; } 
    public BuilderProperties ProblemBuilderProperty { get; set; } 
    public BuilderProperties ServiceRequestBuilderProperty { get; set; } 
    public BuilderProperties ChangeRequestBuilderProperty { get; set; } 
    public BuilderProperties RleaseRequestBuilderProperty { get; set; } 
    public BuilderProperties ReviewActivityBuilderProperty { get; set; } 
    public BuilderProperties ManualActivityBuilderProperty { get; set; } 


    public class BuilderProperties 
    { 
     private bool isEnabled = true; 
     public bool IsEnabled { 
      get { 
       return isEnabled; 
      } 
      set { 
       if (isEnabled == value) 
        return; 

       isEnabled = value; 
      } 
     } 
    } 
} 
+0

Вместо того, чтобы вернуться, почему не могу писать, если (IsEnabled = значение!) IsEnabled = значение; –

+0

@kishoreVM вопрос не в том, как я написал свойство, но как получить доступ к нему в привязке, пожалуйста, сохраните эту тему. – rogue39nin

+0

попробуйте это: IsChecked = "{Binding Path = IncidentBuilderProperty.IsEnabled, Mode = TwoWay} – vidriduch

ответ

0

Имея в контрольной DataContext в AssignedToMeViewData, вы можете настроить привязки для всех ваших BuilderProperties, как это в XAML:

<DockPanel DockPanel.Dock="Top" > 
    <Label Content="Display" /> 
    <CheckBox x:Name="chkIncident" IsChecked="{Binding IncidentBuilderProperty.IsEnabled, Mode=TwoWay}" VerticalAlignment="Center" /> 
    <CheckBox x:Name="chkProblem" IsChecked="{Binding ProblemBuilderProperty.IsEnabled, Mode=TwoWay}" VerticalAlignment="Center" /> 
    <CheckBox x:Name="chkService" IsChecked="{Binding ServiceRequestBuilderProperty.IsEnabled, Mode=TwoWay}" VerticalAlignment="Center" /> 
    <CheckBox x:Name="chkChanges" IsChecked="{Binding ChangeRequestBuilderProperty.IsEnabled, Mode=TwoWay}" VerticalAlignment="Center" /> 
    ... 
</DockPanel> 

Но обратите внимание, что Mode=TwoWay по умолчанию для CheckBox.Checked, так что вы дон Не нужно указывать это.

Если вы должны сделать это с фоновым кодом вместо этого, вы можете настроить привязки следующим образом: комментарий

chkIncident.SetBinding(CheckBox.IsCheckedProperty, 
         new Binding("IncidentBuilderProperty.IsEnabled")); 
chkProblem.SetBinding(CheckBox.IsCheckedProperty, 
         new Binding("ProblemBuilderProperty.IsEnabled")); 
chkService.SetBinding(CheckBox.IsCheckedProperty, 
         new Binding("ServiceRequestBuilderProperty.IsEnabled")); 
... 

знакомства Кишор на ваш вопрос для более продвинутых опций при создании привязок из код- за.

+0

Я не хочу иметь четыре флажка на экране в любом случае, делая их inviisble – rogue39nin

+0

Простите, я не понимаю, что вы имеете в виду. Что именно вы хотите достичь? – Sphinxxx

0

пожалуйста, попробуйте следующий фрагмент кода

FrameworkElement targetObject = chkDisplayAdvanced; 
DependencyProperty targetProperty = CheckBox.IsCheckedProperty; 
object sourceObject = IncidentBuilderProperty;//object of the actual Incidentbuilderclasss here 
string sourceProperty = "IsEnabled"; 
var binding = new Binding(sourceProperty) { 
    Source = sourceObject, Mode = BindingMode.TwoWay 
    }; 
targetObject.SetBinding(targetProperty, binding); 
Смежные вопросы