2017-06-11 15 views
0

このデータバインディングは私を困惑させます。ボタンのテキストをプレイヤーの人生のテキストにバインドしようとしています。私は他のいくつかの記事に続き、私はそれを持っていたと思って、アプリが実行されますが、ボタンのテキストは空白のままです。ここに私のXAMLは次のとおりです。ここでUWPアプリケーションでXAML/C#で双方向データバインディングを許可するにはどうすればよいですか?

<Page.DataContext> 
    <local:Player x:Name="PlayerCur"></local:Player> 
</Page.DataContext> 
<Grid Background="#FFFFFFFF"> 
<StackPanel Margin="0,0,181,0"> 
<TextBlock x:Name="LifeTitle" TextAlignment="Center" FontSize="40" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center" TextWrapping="Wrap" Text="Life" Height="56" Width="139"/> 
     <Button Name="Life" Content="{Binding PlayerLife}" FontSize="50" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center" Height="126" Width="139"> 
      <Button.Flyout> 
       <MenuFlyout> 
        <MenuFlyoutItem Text="Reset Life" Click="Reset_Life_Click"/> 
        <MenuFlyoutSeparator/> 
        <MenuFlyoutSubItem x:Name="lAdd" Text="Heal" > 
         <MenuFlyoutItem x:Name="lAddone" Text="+1" Click="Add_OneL_Click"/> 
         <MenuFlyoutItem x:Name="lAddfive" Text="+5" Click="Add_FiveL_Click"/> 
         <MenuFlyoutItem x:Name="lAddten" Text="+10" Click="Add_TenL_Click"/> 
        </MenuFlyoutSubItem> 
        <MenuFlyoutSubItem x:Name="lSubtract" Text="Deal Damage"> 
         <MenuFlyoutItem x:Name="lSubone" Text="-1" Click="Sub_OneL_Click"/> 
         <MenuFlyoutItem x:Name="lSubthree" Text="-5" Click="Sub_FiveL_Click"/> 
         <MenuFlyoutItem x:Name="lSubfive" Text="-10" Click="Sub_TenL_Click"/> 
        </MenuFlyoutSubItem> 


        <MenuFlyoutSeparator></MenuFlyoutSeparator> 
       </MenuFlyout> 
      </Button.Flyout> 
     </Button> 
    </StackPanel> 

はプレイヤークラスです:

namespace App1.Classes 
    { 
     public class Player: INotifyPropertyChanged 
     { 
    private string _PlayerLife; 
    private string _PlayerPoison; 
    private int _life = 20; 
    private int _poison = 0; 
    public string PlayerLife 
    { 
     get { return _PlayerLife; } 

    } 
    public string PlayerPoison 
    { 
     get { return _PlayerPoison; } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnPropertyChanged(string propertyName) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
    public void reset(int destination) 
    { 
     if(destination==0) 
     { 
      _life = 20; 
      OnPropertyChanged("Life"); 
     } 
     else if(destination==1) 
     { 
      _poison = 0; 
      OnPropertyChanged("Poison"); 
     } 
     else 
     { 

     } 
    } 

    public void incrementer(int destination,int modifier) 
    { 
     if(destination==0) 
     { 
      _life = _life + modifier; 
      _PlayerLife = _life.ToString(); 
      OnPropertyChanged("life"); 
     } 
     else if(destination==1) 
     { 
      _poison = _poison + modifier; 
      _PlayerPoison = _poison.ToString(); 
      OnPropertyChanged("poison"); 
     } 
     else 
     { 

     } 
    } 
} 

私は問題のように感じるとき、人生と毒の変化私のクラスは、XAMLを通知していないとされます。

どのような提案/ポインターにも大変感謝しています。

答えて

2

リアルシンプル。 はちょうど彼らが正確にプロパティの名前と一致する必要があるとして、Content="{Binding PlayerLife, **Mode=TwoWay**}" (これらのアスタリスクは、新しいコードを示すためにだけ存在し、実際にそれらを入れないでください)

+0

ありがとうございます!それは働いた –

1

OnPropertyChangedを()メソッドが正しくありません入力してください。プロパティはPlayerLifeとPlayerPoisonですが、OnPropertyChanged呼び出しでは "Life"、 "Poison"、 "Life"、 "Poison"が使用されます。お試しください

OnPropertyChange(nameof(PlayerLife)); 
関連する問題