开发者

WPF: Binding to a custom class "Cannot find source for binding"

Did this:

public class myClass : INotifyPropertyChanged
{
    public bool? myFlag = false;
    public bool? MyFlag
    {
        get { return myFlag; }
        set
        {
            myFlag = value;
            OnPropertyChanged("MyFlag");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(string name)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(name));
    }
}

Declared a test variable myClass in the Window1 class:

public partial class Window1 : Window
{
    myClass test;

    public Window1()
    {
        InitializeComponent();
        test = new myClass();
    }
}

Here's an example XAML file:

<Window x:Class="WpfApplication5.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Titl开发者_StackOverflow社区e="Window1" Height="300" Width="300" IsEnabled="{Binding ElementName=test, Path=MyFlag}">
    <Grid>
        <Button>You shouldn't be clicking me</Button>
    </Grid>
</Window>

The window isn't disabled, and the debugger is showing me that message.

What am I missing?


The ElementName property of the Binding is meant to target other elements in xaml, not properties/fields of the object. The common way to do what you're trying to accomplish is to assign an instance of myClass to the Window's DataContext property:

public partial class Window1 : Window
{
    //myClass test;

    public Window1()
    {
        InitializeComponent();
        this.DataContext = new myClass(); //test = new myClass();
    }
}

And then your binding will look like this: IsEnabled="{Binding Path=MyFlag}".

If you actually wanted to bind to a property on the Window itself, you would use a binding like this: IsEnabled="{Binding RelativeSource={RelativeSource Self}, Path=test.MyFlag}"

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜