2017-03-26 19 views
0

私は自分の質問に対する答えを見つけるのに苦労しているようです(私はそれらの多くを読みましたが、メインウィンドウにあるTextBlockにMainWindow.xaml.csに保存されているDateTimeを表示しようとしています。私はそれで遊んでいたので、私は、テストコードを設定:C#WPF - MainWindowからMainWindowのTextBlockへのバインディングプロパティ

MainWindow.xaml.cs:

public partial class MainWindow : Window 
{ 
    public DateTime displayTime; 

    public MainWindow() 
    { 
     displayTime = new DateTime(1,1,1,0,1,21,306); 
     InitializeComponent(); 
    } 
} 

MainWindow.xaml:

<Window x:Class="Project1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:Project1" 
    mc:Ignorable="d" 
    Title="Main Window" MinHeight="450" Height="450" MinWidth="650" Width="650"> 

<TextBlock Text="{Binding Path=displayTime, StringFormat='{}{0:h \: m \: ss\.fff}', Mode=OneWay}" /> 

答えて

0

カップルがあります修正するべき事柄。

最初はdisplayTimeない財産あり、それはフィールドです。 getter/setterを追加して、バインディングのプロパティにアクセスできるようにします。

public DateTime displayTime { get; set; } 

2つ目は結合Binding Path=displayTimedisplayTimeはDataContextのの財産であることを期待しています。

は、自己に設定ウィンドウのDataContextを試してみてください。

InitializeComponent(); 
DataContext = this; 

または結合の相対的なソースを使用します。

<TextBlock Text="{Binding Path=displayTime, 
        StringFormat='{}{0:h \: m \: ss\.fff}', 
        Mode=OneWay, 
        RelativeSource={RelativeSource AncestorType=Window}}"/> 

を、SmaIでビューにコードビハインドからプロパティをバインドするために細かいです。より大きなビューでは、マークアップとコードは非常に複雑になる可能性があります。そのビュー(MVVMについて読む)に別のビューモデルを作成することをお勧めします。

+0

もちろん!私はとても愚かな気がします...:D:D –

+0

@ Krepsy3、バインディングが問題を解決する場合は、アプリケーションの実行中にVisual Studioの出力ウィンドウを確認します。 VSは実行時に、バインディングが間違い(間違ったパス、ソース、タイプなど)で書き込まれたときに報告します – ASh

+0

thx。 stdioやstderrでは? –

関連する問題