この問題は非常に基本的なことです。私はWPFを学んだだけで、文字列プロパティへのtextbox.textへの単純な双方向バインディングを作成できませんでした。単純なWPFテキストボックステキストのバインドTwoWay
XAMLコード:
<Window x:Class="WpfApplication1.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:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid x:Name="StuInfo">
<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="10,26,0,0" TextWrapping="Wrap" Text="{Binding Path=str,Mode=TwoWay}" VerticalAlignment="Top" Width="120"/>
<Button x:Name="button" Content="Check" HorizontalAlignment="Left" Margin="10,67,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>
</Grid>
C#コード
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
str = "OK";
}
public string str { get; set; }
private void button_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine(str);
}
}
まず、テキストボックスには "OK" と表示されませんが、それは空白になっています。次に、引用符を付けずに「blablabla」と入力して、テキストボックスに別のテキストを入力しました。次に、ボタンをクリックして、自分のstrプロパティが更新されているかどうかを確認します。明らかに、strにはまだ "OK"が含まれています。
私はここで何が間違っていましたか?私は拘束力のある仕事をするために何を失いましたか?
またはこれにあなたのDataContextを設定することができますが、それは本当に悪い考えです。 ViewModelとビューを分離する必要があります。 –
したがって、DataContextを設定することで問題は解決します。とにかく、私はオブジェクトをインスタンス化せずに文字列プロパティを直接使用することなく動作させることができますか?この質問の答えはこれにDataContextを設定していますか? – kurakura88
ウィンドウのコードビーンにバインドすることはできますが、それには何も問題はありません: 'public MainWindow {InitializeComponent(); ** DataContext = this; **} ' – slugster