C# 在1个窗口上有多于1个类型时命名{Binding}

C# 在1个窗口上有多于1个类型时命名{Binding},c#,wpf,binding,C#,Wpf,Binding,如果在WPF窗口中,一个参数有多个{Binding},是否可以命名它们 例如,对于我拥有的图像(在XAML部分):Visibility=“{Binding}”但也在一些我想创建的文本框上IsEnabled=“{Binding}” 有什么办法给他们命名吗?这样,在背面的代码(.cs侧)中,它将选择正确的一个 Thanx。您只需让视图模型将这些属性包装到单个对象中即可: public class ViewModel : INotifyPropertyChanged { private boo

如果在WPF窗口中,一个参数有多个{Binding},是否可以命名它们

例如,对于我拥有的图像(在XAML部分):
Visibility=“{Binding}”
但也在一些我想创建的文本框上
IsEnabled=“{Binding}”
有什么办法给他们命名吗?这样,在背面的代码(.cs侧)中,它将选择正确的一个


Thanx。您只需让视图模型将这些属性包装到单个对象中即可:

public class ViewModel : INotifyPropertyChanged
{
    private bool imagesVisibility;
    private bool isTextBoxEnabled;

    public event PropertyChangedEventHandler PropertyChanged;

    public bool ImagesVisibility
    {
        get { return this.imagesVisibility; }
        set
        {
            this.imagesVisibility = value;
            this.PropertyChanged(this,
                new PropertyChangedEventArgs("ImagesVisibility"));
        }
    }

    public bool IsTextBoxEnabled
    {
        // ... similar as with ImagesVisibility property implementation
    }
}
注意,您还需要一个布尔到可见性转换器,您可以在StackOverflow()上找到它的示例。。。或者

然后,只需将
ViewModel
的实例设置为表单数据上下文:

public MyForm()
{
    InitializeComponent();
    DataContext = new ViewModel();
}

然后你可以做图像绑定,比如
Visibility=“{binding ImagesVisibility}”
和textbox
IsEnabled=“{binding IsTextBoxEnabled}”

看起来这会起作用,会深入研究并让你知道我是否能让它起作用:)嗯,好的,我想我现在把它都设置好了,呃。。现在如何在代码中调用它啊,是的。对不起,我还在学习c#和WPF的第一阶段。它确实工作得很完美。但是,如果(例如)我现在想再次启用所有文本框,我应该使用什么呢。我现在可以用一个命令来完成,对吗?@Dante:是的,这可以用一个命令来完成。所有这些命令都必须将
ViewModel.IsTextBoxEnabled
属性更改为
true
。然后,由于
INotifyPropertyChanged
接口更改将传播到所有绑定项(本例中为文本框)并相应更新。我也是这么想的,但当我在方法中输入“ViewModel.IsTextBoxEnabled=true”时,它会在错误框中返回:非静态字段method需要对象引用,或属性“WpfApplication1.ViewModel.IsTextBoxEnabled.get”