Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定变量未使用INotifyPropertyChanged更新并设置DataContext_C#_Wpf_Xaml_Mvvm_Data Binding - Fatal编程技术网

C# 绑定变量未使用INotifyPropertyChanged更新并设置DataContext

C# 绑定变量未使用INotifyPropertyChanged更新并设置DataContext,c#,wpf,xaml,mvvm,data-binding,C#,Wpf,Xaml,Mvvm,Data Binding,我正在写一个简单的宏程序,你可以在上面创建宏,通过这样做,我想创建一个用户控件,这将是一个新的宏编辑器。每个宏编辑器有两个文本框。左侧是您需要按下的键,右侧文本框显示在按下第一个键后将输出的键。我对这两个文本框使用了绑定,但似乎没有更新。它只显示起始值 C: XAML: 设置文本时将触发属性更改事件 这不会调用文本的setter。您需要一行以Text=开头。也就是说,更好的方法是实际拥有两个属性,每个字段一个字符串。拥有数组没有任何好处。正如我在评论中提到的,数组不会触发PropertyChan

我正在写一个简单的宏程序,你可以在上面创建宏,通过这样做,我想创建一个用户控件,这将是一个新的宏编辑器。每个宏编辑器有两个文本框。左侧是您需要按下的键,右侧文本框显示在按下第一个键后将输出的键。我对这两个文本框使用了绑定,但似乎没有更新。它只显示起始值

C:

XAML:


设置文本时将触发属性更改事件


这不会调用文本的setter。您需要一行以Text=开头。也就是说,更好的方法是实际拥有两个属性,每个字段一个字符串。拥有数组没有任何好处。

正如我在评论中提到的,数组不会触发PropertyChanged事件,因此绑定甚至不知道您更改了值。可能的解决方法是在您更改项目后手动调用它:

TextBoxIndex = 0;
Text[TextBoxIndex] = "test";
NotifyPropertyChanged("Text[]");
是的,[]是故意的

更好的方法是使用两个单独的属性


稍微相关:如果希望在用户仍在输入文本时更新属性,请将绑定的UpdateSourceTrigger设置为PropertyChanged。文本框。文本框失去焦点时,默认情况下会使用LostFocus更新。

您似乎不会在任何地方更改它们……我更改了,只是没有显示。我把文本[0]=测试;没有什么改变,所以。。。然后显示它。您不能将PropertyChange应用于数组。必须使用单独的属性跟踪每个文本值。@数组不会通知更改。您可以尝试使用ObservaleCollection,但由于您只有两个元素,因此可能需要使用两个属性。谢谢你,我现在意识到了,因为我以前做过这件事,也做过那件事,而且成功了。
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="250*"/>
    <ColumnDefinition Width="141*"/>
    <ColumnDefinition Width="109*"/>
</Grid.ColumnDefinitions>
<TextBlock FontSize="20" HorizontalAlignment="Center" Grid.ColumnSpan="2" VerticalAlignment="Center" Margin="236,12,126.625,11">⟶</TextBlock>
<TextBox IsReadOnly="True" Text="{Binding Text[0]}" GotFocus="TextBox_GotFocus" Background="Transparent" Margin="15"  Grid.Column="0"/>
<TextBox IsReadOnly="True" Text="{Binding Text[1]}" GotFocus="TextBox_GotFocus_1" Background="Transparent" Margin="15"  Grid.Column="1" Grid.ColumnSpan="2"/>
text[0] = "test";
TextBoxIndex = 0;
Text[TextBoxIndex] = "test";
NotifyPropertyChanged("Text[]");