将文本框绑定到字符串变量

问题描述 投票:0回答:1

我真的很难让文本框绑定到字符串变量,并且在互联网上尝试了各种解决方案,但没有成功。也许有人可以指出我做错了什么?

Xaml

 <Border Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="3" CornerRadius="5" BorderBrush="{StaticResource SteelBlue}" BorderThickness="1" Opacity="0.8">
     <TextBox Style="{StaticResource TCGTextBox}" Text="{Binding ProgramManager.ProgramName, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"  GotFocus="TCG_TB_Focused" CornerRadius="0" LostFocus="TCG_TB_UnFocused" x:Name="TCG_TestProgramName" ></TextBox>
</Border>

ProgramManager 是在我的 MainWindow.xaml.cs 文件中声明的

TestPrograms ProgramManager = new TestPrograms();

C#

public class TestPrograms : Window, INotifyPropertyChanged
{



    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }



    public int Selected_Test = 0;

    private string _ProgramName = string.Empty;

    public string ProgramName
    {

        get => _ProgramName;

        set
        {
            _ProgramName = value;
            NotifyPropertyChanged();
        }


    }


    public void LoadTestProgram(TestProgramsViewModel program)
    {

        ProgramName = program.Test_Name;

    }
}

每当我调用 LoadTestProgram() 时,_ProgramName 都会正确更新,但 UI 不会更新。我尝试过使用静态变量并使用 x:Bind 来执行此操作,但仍然无法使其工作。对此表示赞赏并提供帮助。

c# mvvm binding textbox winui
1个回答
0
投票

所以,正如上面0x436f提到的,我没有设置数据上下文。为此,我在 XAML 中编辑了以下内容。

<Border x:Name="ROOTPANEL" Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="3" CornerRadius="5" BorderBrush="{StaticResource SteelBlue}" BorderThickness="1" Opacity="0.8">
     <TextBox Style="{StaticResource TCGTextBox}" Text="{Binding ProgramManager.ProgramName, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"  GotFocus="TCG_TB_Focused" CornerRadius="0" LostFocus="TCG_TB_UnFocused" x:Name="TCG_TestProgramName" ></TextBox>
</Border>

向边框元素添加名称,在本例中将其称为 ROOTPANEL。

然后我将 ROOTPANEL 的数据上下文设置为正确的 ViewModel。

TCGRootPanel.DataContext = ProgramManager;

注意,ROOTPANEL 可以位于树视图的更高位置,以便捕获更多子元素(如果它们都访问同一虚拟机)。

© www.soinside.com 2019 - 2024. All rights reserved.