で選択したタイムゾーンに基づいて、テキストボックスに表示時間を使う:私は以下を使用して、タイムゾーン情報と私のコンボボックスを移入していますデータバインディング、コンボボックス
MainWindow.xaml.cs
private void Window_Loaded(object sender, RoutedEventArgs e)
{
ReadOnlyCollection<TimeZoneInfo> TimeZones = TimeZoneInfo.GetSystemTimeZones();
this.DataContext = TimeZones;
cmb_TZ.SelectedIndex = 1;
}
<ComboBox x:Name="cmb_TZ" ItemsSource="{Binding}" Grid.Row="0" Grid.Column="2" Height="28.5" Margin="10,65.375,30.945,0" VerticalAlignment="Top" d:LayoutOverrides="LeftMargin, RightMargin, TopMargin, BottomMargin" SelectionChanged="ComboBox_Selection"/>
:
以下XAMLからのものです210
また、私はこのコードを使用することによりテキストボックスに対応する値を示すことができています:
private void ComboBox_Selection(object Sender, SelectionChangedEventArgs e) { var cmbBox = Sender as ComboBox; DateTime currTime = DateTime.UtcNow; TimeZoneInfo tst = (TimeZoneInfo)cmbBox.SelectedItem; txt_Time.Text = TimeZoneInfo.ConvertTime(currTime, TimeZoneInfo.Utc, tst).ToString("HH:mm:ss dd MMM yy"); }
txt_Timeは私のテキストボックスです。そのためのXAMLコードは次のとおりです。
<TextBox x:Name="txt_Time" Grid.Row="0" Grid.Column="1" Height="28.5" Margin="26.148,65.375,28.13,0" TextWrapping="Wrap" VerticalAlignment="Top" d:LayoutOverrides="LeftMargin, RightMargin, TopMargin, BottomMargin"/>
私の質問は:データバインディングを使用してこれを実現する方法は
ありますか? 私は上記のストレートフォワード方式を使用してこれを行うことができます。しかし、私はこの計算がデータバインディングを介して実行できるかどうか疑問に思っていましたか?
私はC#/ WPFに新しいですし、私は単純なクラスを作成してもINotifyPropertyChangedのを使用してクラスとメインウィンドウのコンストラクタでそれを参照しようとしたが、私もコンボボックスが人口得ることができませんでした。
私は本当に理解して、C#のデータバインディングの魔法を使用したいと思います。あなたの
ComboBox
で
Comboboxのすべての値を正しくバインドしますか? – Balaji
コンボボックスにはタイムゾーンのリストがあり、CBで選択したタイムゾーンに応じて、対応する時刻をテキストボックスに表示したいと考えています。 –
"C#のデータバインディングの魔法を理解して使用したいと思っています。"本当にそれが必要な場合は、他の回答に示されているように、コードの中にイベントハンドラがないソリューションを探すべきです。 – Clemens