user1272388
user1272388

Reputation: 103

Databinding Property not found, why?

pls help me, why this binding doesn't works, I would like to binding from the PlayerBar.xaml which datacontext is PlayerBarPresenter to PlayerBarPresenter.Card1.ImgCard like this Source = Binding{Source Card1, Path = ImgCard} than I get this exception

A first chance exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll System.Windows.Data Error: BindingExpression path error: 'ImgCard' property not found on 'Card1' 'System.String' (HashCode=949723141). BindingExpression: Path='ImgCard' DataItem='Card1' (HashCode=949723141); target element is 'System.Windows.Controls.Image' (Name=''); target property is 'Source' (type 'System.Windows.Media.ImageSource')..

the file is found If is biding in the same property just in the TablePresenter, but I want to binding in the TablePresenter.Card1.ImgCard

UserControl x:Class="poki.View.PlayerBar" Data context is TablePresenter

    <Image Width="50" Height="80" Source="{Binding Source=Card1, Path=ImgCard}" RenderTransformOrigin="0.5,0.5" Canvas.Left="108.358"
Canvas.Top="-8.349">

TablePresenter.cs

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using poki.View;
using System.Windows.Media.Imaging;
using poki.Model;

namespace poki.Presenters
{
    public class PlayerBarPresenter : PresenterBase<PlayerBar>
    {

        private BitmapImage playerImage;
        public BitmapImage PlayerImage
        {
            get { return playerImage; }
            set
            {
                playerImage = value;
                OnPropertyChanged("PlayerImage");
            }
        }

        private Card card1;
        public Card Card1
        {
            get { return card1; }
            set
            {
                card1 = value;
                OnPropertyChanged("Card1");
            }
        }



#endregion


        public PlayerBarPresenter(PlayerBar pb) : base(pb)
        {
            Card1 = new Card(22);

            Card1.S = "fasyom";           
        }
    }
}

table.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using poki.Presenters;
using System.Windows.Media.Imaging;
using poki.Model;

namespace poki.View
{
    public partial class Table : PhoneApplicationPage
    {
        public TablePresenter Presenter { get { return this.DataContext as TablePresenter; } }

        public Table()
        {
            this.Loaded += new RoutedEventHandler(Table_Loaded);
            InitializeComponent();
        }

        void Table_Loaded(object sender, RoutedEventArgs e)
        {
            DataContext = new TablePresenter(this); 

            PlayerBarPresenter a = new PlayerBarPresenter(new PlayerBar());


            //a.Card1.ImgCard = new BitmapImage(new Uri("/Datas/Images/1/7.png", UriKind.Relative));
            //a.Card2 = new BitmapImage(new Uri("/Datas/Images/1/7.png",UriKind.Relative));
            gridTable.Children.Add(a.View);
        }




    }
}

card.cs

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Media.Imaging;

namespace poki.Model
{
    public class Card : Notifier
    {
        public int card { get; set; }

        public Card(int Card1)
        {
            card = Card1;
            ImgCard = new BitmapImage(new Uri("/Datas/Images/1/7.png", UriKind.Relative)); //new BitmapImage(new Uri("/Datas/Images/Cards/" + Suit + "/" + Rank + ".png",UriKind.Relative)); 

        }        

        public int Suit
        {
            get { return card / 13; }
        }

        public int Rank
        {
            get { return card % 13; }
        }


        private BitmapImage imgCard;
        public BitmapImage ImgCard
        {
            get { return imgCard; }
            set
            {
                imgCard = value;
                OnPropertyChanged("ImgCard");
            }
        }



    }
}

Upvotes: 2

Views: 816

Answers (2)

brunnerh
brunnerh

Reputation: 184316

You set the Source to the string "Card1", of course it does not have any properties that you expect. As the card is in the DataContext you will want to extend the Path (Path=Card1.ImgCard), never set any source when binding to the DataContext or that will be used instead of the DataContext.

Upvotes: 0

Pedro Lamas
Pedro Lamas

Reputation: 7233

Think your binding expression is wrong, please try it like this:

<Image Width="50" Height="80" Source="{Binding Card1.ImgCard}" RenderTransformOrigin="0.5,0.5" Canvas.Left="108.358" Canvas.Top="-8.349">

Upvotes: 5

Related Questions