答えを探して StackOverflow を確認しましたが、ここで質問するのは私の最後の手段なので、反対票を投じないでください。私よりもデータバインディングの経験が豊富な人の意見が必要です: これが私がバインドしたいものです:
<Grid x:Name="all" Grid.Row="1">
<TextBlock Text="all" Foreground="{Binding Color}" x:Name="allTxt" Grid.Row="0" Padding="10,21,0,0" FontWeight="Light" FontSize="{StaticResource PhoneFontSizeExtraLarge}" Tap="TextBlock_Tap_1" />
</Grid>
そして、これが Grid コンポーネントの DataContext を設定する方法です
public Multiplication()
{
InitializeComponent();
this.all.DataContext = App.MyObjectsViewModel.allObjectsVisible;
}
MyObjectsViewModel のコンストラクターは次のとおりです。
public MyObjectsViewModel(DataContextManager manager)
{
allObjectsVisible = new allVisibleBtn() { Allvisible = true, Color = "white" };
}
allObjectsVisible 属性は次のとおりです。
private allVisibleBtn _allObjectsVisible;
public allVisibleBtn allObjectsVisible
{
get { return _allObjectsVisible;}
set { _allObjectsVisible= value; NotifyPropertyChanged("allObjectsVisible"); }
}
最後に、allObjectsBtn のクラスを次に示します。
public class allVisibleBtn : BaseViewModel
{
private bool _Allvisible;
public bool Allvisible
{ get { return _Allvisible; }
set { NotifyPropertyChanging("Allvisible"); _Allvisible = value; NotifyPropertyChanged("Allvisible"); }
}
private string _Color;
public string Color
{
get { return _Color; }
set { if (value != null) { NotifyPropertyChanging("Color"); _Color = value; } NotifyPropertyChanged("Color"); }
}
}
予想される動作は、誰かがタップした瞬間にテキストブロックの前景を変更することです。OFC タップ後に実行される処理が他にもいくつかありますが、問題の点から見て重要なことは何もありません。だから私を助けてください、なぜ私は次のエラーを得るのですか:
`System.Windows.Data Error: BindingExpression path error: 'Color' property not found on 'Project.MyObjectsViewModel' 'Project.MyObjectsViewModel' (HashCode=50930930). BindingExpression: Path='Color' DataItem='Project.MyObjectsViewModel' (HashCode=50930930); target element is 'System.Windows.Controls.TextBlock' (Name='allTxt'); target property is 'Foreground' (type 'System.Windows.Media.Brush')..`