2012-04-20 3 views
2

pls help me, почему эта привязка не работает, я хотел бы привязать ее к PlayerBar.xaml, который datacontext является PlayerBarPresenter для PlayerBarPresenter.Card1.ImgCard, как этот Source = Binding {Source Card1, Path = ImgCard}, чем я получаю это исключениеДанные привязки Не найдено, почему?

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')..

файл найден Если выжидать в той же собственности только в TablePresenter, но я хочу, чтобы связывание в TablePresenter.Card1.ImgCard

UserControl х: Class = "poki.View .PlayerBar "Контекст данных 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"); 
      } 
     } 



    } 
} 
+1

Пожалуйста, прочитайте документацию о собственности, прежде чем установить его в случайном порядке, я, кажется, как вы никогда не смотрели на то, как 'Binding.Source' может использоваться. –

ответ

0

Вы установите Source в строку "Card1", конечно, он не имеет никаких свойств что вы ожидаете. Поскольку карта находится в DataContext, вы хотите расширить Path (Path=Card1.ImgCard), никогда не устанавливайте источник при привязке к DataContext или который будет использоваться вместо DataContext.

5

Подумайте ваше выражение привязки не так, пожалуйста, попробуйте так:

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

спасибо, он работает – user1272388

+0

Great; пожалуйста, не забудьте отметить вопрос «Ответ»! –

Смежные вопросы