绑定到 Properties.Settings.Default.myString 的文本框文本不会更新 myString
Textbox text binding to Properties.Settings.Default.myString does not update myString
我得到了一个字符串Properties.Settings.Default.myString
和两个文本框
<TextBox x:Name="textBox1" Text="{Binding myString}"/>
<TextBox x:Name="textBox2" Text="{Binding myString}"/>
当我在 textBox1 中键入文本并更改焦点时,textBox2 中的文本将更新为我刚刚在 [=] 中输入的文本29=]textBox1.
让我感到困惑的是 Properties.Settings.Default.myString
从不更新我在任一文本框中输入的文本。更改后,我通过在调试器中检查 myString
确认了这一点。
我的问题是,为什么文本框中的这种变化没有反映在绑定变量中myString
?
完成 XAML(WPF 应用程序):
<Window
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:textBoxDataBinding"
xmlns:Properties="clr-namespace:textBoxDataBinding.Properties" x:Class="textBoxDataBinding.MainWindow"
mc:Ignorable="d"
Title="MainWindow" Height="212" Width="318">
<Window.DataContext>
<Properties:Settings/>
</Window.DataContext>
<Grid>
<TextBox x:Name="textBox1" Text="{Binding myString}"/>
<TextBox x:Name="textBox2" Text="{Binding myString}"/>
<!-- Button does: textBlock.Text = Properties.Settings.Default.myString; -->
<Button x:Name="button1" Content="Button" HorizontalAlignment="Left" Margin="10,157,0,0" VerticalAlignment="Top" Width="75" Click="button1_Click"/>
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="90,161,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"/>
</Grid>
编辑
您没有绑定到 Default
单例设置,您正在创建一组新的设置。您需要绑定的是 Settings.Default
单例实例。
例如
<Window DataContext="{x:Static properties:Settings.Default}">
备选方案:
<TextBox x:Name="textBox1" Text="{Binding Default.myString}"/>
<TextBox x:Name="textBox2" Text="{Binding Default.myString}"/>
历史原因第一个回答:
您需要绑定到默认属性
您需要确保
- DataContext 是您的
Properties.Settings.Default
对象。
- 将绑定源设置为
Properties.Settings.Default
这对我有用:
<StackPanel>
<TextBox Text="{Binding Path=myStrring,Source={x:Static properties:Settings.Default}}"></TextBox>
<TextBox Text="{Binding Path=myStrring,Source={x:Static properties:Settings.Default}}"></TextBox>
</StackPanel>
或更简洁的语法:
<Window x:Class="WpfApplication1.SO29048483"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:properties="clr-namespace:WpfApplication1.Properties"
Title="SO29048483" Height="300" Width="300">
<StackPanel DataContext="{x:Static properties:Settings.Default}">
<TextBox Text="{Binding myStrring}" />
<TextBox Text="{Binding myStrring}" />
</StackPanel>
</Window>
如果您想在失去焦点之前更新它:
<TextBox Text="{Binding myStrring, UpdateSourceTrigger=PropertyChanged}" />
我得到了一个字符串Properties.Settings.Default.myString
和两个文本框
<TextBox x:Name="textBox1" Text="{Binding myString}"/>
<TextBox x:Name="textBox2" Text="{Binding myString}"/>
当我在 textBox1 中键入文本并更改焦点时,textBox2 中的文本将更新为我刚刚在 [=] 中输入的文本29=]textBox1.
让我感到困惑的是 Properties.Settings.Default.myString
从不更新我在任一文本框中输入的文本。更改后,我通过在调试器中检查 myString
确认了这一点。
我的问题是,为什么文本框中的这种变化没有反映在绑定变量中myString
?
完成 XAML(WPF 应用程序):
<Window
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:textBoxDataBinding"
xmlns:Properties="clr-namespace:textBoxDataBinding.Properties" x:Class="textBoxDataBinding.MainWindow"
mc:Ignorable="d"
Title="MainWindow" Height="212" Width="318">
<Window.DataContext>
<Properties:Settings/>
</Window.DataContext>
<Grid>
<TextBox x:Name="textBox1" Text="{Binding myString}"/>
<TextBox x:Name="textBox2" Text="{Binding myString}"/>
<!-- Button does: textBlock.Text = Properties.Settings.Default.myString; -->
<Button x:Name="button1" Content="Button" HorizontalAlignment="Left" Margin="10,157,0,0" VerticalAlignment="Top" Width="75" Click="button1_Click"/>
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="90,161,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"/>
</Grid>
编辑
您没有绑定到 Default
单例设置,您正在创建一组新的设置。您需要绑定的是 Settings.Default
单例实例。
例如
<Window DataContext="{x:Static properties:Settings.Default}">
备选方案:
<TextBox x:Name="textBox1" Text="{Binding Default.myString}"/>
<TextBox x:Name="textBox2" Text="{Binding Default.myString}"/>
历史原因第一个回答:
您需要绑定到默认属性 您需要确保
- DataContext 是您的
Properties.Settings.Default
对象。 - 将绑定源设置为
Properties.Settings.Default
这对我有用:
<StackPanel>
<TextBox Text="{Binding Path=myStrring,Source={x:Static properties:Settings.Default}}"></TextBox>
<TextBox Text="{Binding Path=myStrring,Source={x:Static properties:Settings.Default}}"></TextBox>
</StackPanel>
或更简洁的语法:
<Window x:Class="WpfApplication1.SO29048483"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:properties="clr-namespace:WpfApplication1.Properties"
Title="SO29048483" Height="300" Width="300">
<StackPanel DataContext="{x:Static properties:Settings.Default}">
<TextBox Text="{Binding myStrring}" />
<TextBox Text="{Binding myStrring}" />
</StackPanel>
</Window>
如果您想在失去焦点之前更新它:
<TextBox Text="{Binding myStrring, UpdateSourceTrigger=PropertyChanged}" />