演習として、WPFで自転車用ギア計算機を作成することにしました。トリガーするセッターを使用して2つのプライベートフィールドを作成しましたが、動的に計算されるため、「読み取り専用」として動作するOnPropertyChanged()
1つのデータバインドプロパティがあります。ratio
プログラムを実行すると、テキストボックスが表示され、初期値が正しく表示され、プロパティ変更ハンドラーの「動作中」の単語が表示されますが、ratio
TextBlockは更新されません。
これはプロパティの「取得」方法によるものと思われます。すべてにプライベートフィールドを追加する必要があるのではないかと思います。これにDependencyPropertyがあるべきではないかと思います...しかし実際には私はこれに関する知識の限界であり、この些細なプログラムを機能させることはできません。
これは私のモデルです:
class SingleGearsetModel : INotifyPropertyChanged
{
public SingleGearsetModel()
{
crank = 44;
cog = 16;
}
private int _crank;
private int _cog;
public int crank {
get{return _crank;}
set{
_crank = value;
OnPropertyChanged("crank");
}
}
public int cog {
get{return _cog;}
set{
_cog = value;
OnPropertyChanged("cog");
}
}
public double ratio
{
get {
return (double)crank / (double)cog;
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string arg)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(arg));
Console.Writeline("working");
}
}
} // end class
これは私のXAMLです:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="CalculadorFixaWPF.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<DockPanel x:Name="LayoutRoot">
<TextBox Text="{Binding crank, Mode=TwoWay}"/>
<TextBox Text="{Binding cog, Mode=TwoWay}"/>
<TextBlock Text="{Binding ratio, StringFormat={}{0:0.00}}"/>
</DockPanel>
</Window>
そして、これは私のコードビハインド(MainWindow.xaml.cs)にあります:
public partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
this.DataContext = new SingleGearsetModel();
}
}
読んでくれてありがとう!