C# 如何解决绑定问题

C# 如何解决绑定问题,c#,wpf,data-binding,C#,Wpf,Data Binding,我有一个控件,需要使用复选框来启用禁用部分,但我需要将其绑定到一个类,因此我完成了以下操作。因此,我的问题是如何设置绑定到say,例如IncidentBuilderProperty.IsEnabled,是否应该使用参数进行代码隐藏 <DockPanel DockPanel.Dock="Top" > <Label Content="Display" /> <CheckBox Name="chkDisplayAdvanced" IsThreeState="F

我有一个控件,需要使用复选框来启用禁用部分,但我需要将其绑定到一个类,因此我完成了以下操作。因此,我的问题是如何设置绑定到say,例如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;
            }
        }
    }
}
在控件的DataContext中有一个AssignedToMeViewData,您可以像在xaml中这样设置与所有BuilderProperty的绑定:

<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>

请参阅kishore对您的问题的评论,以了解从代码隐藏创建绑定时的更多高级选项。

请尝试以下代码片段

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);

如果我被抓住了,你为什么不能写信呢值isEnabled=值@kishoreVM问题不在于我如何编写属性,而在于如何在绑定中访问属性。请继续关注主题谢谢。尝试以下操作:IsChecked={binding Path=IncidentBuilderProperty.IsEnabled,Mode=TwoWay}@vidriduch是他们从控件的代码后面以那种方式来做这件事的方法,正如我所想的那样,控件的数据上下文是什么?AssignedToMeViewData对象,还是其中一个BuilderProperty?无论哪种方式,您都必须绑定IsEnabled大写字母“I”属性,而不是IsEnabled小写字母“I”字段。我不希望屏幕上有四个复选框使它们不可见。对不起,我不明白您的意思。你到底想要实现什么?
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);