将两个数据/信息源绑定在一起并使它们保持同步的一般技术。
我正在将数据传递到 Modal 进行编辑。问题是每当我的产品数据更新时(通过 fetchData 每 5 秒),模式中的输入字段也会更改。如何预防呢? 下面是一个简化版本...
我有一个字符串数组,我希望每个字符串都绑定到一个输入。 然而,编辑输入似乎并没有更新数组(也许是孤立的范围问题?)。 建议?
如何在 WPF MVVM 中从另一个 ViewModel 更新 ViewModel?
我有一个应用程序,用来从 Git 存储库中选择一些内容。 这是应用程序的基本设计。 整个窗口有一个ViewModel,在其中我定义了两个实例...
我正在使用 MVVM 设计模式在 C# WPF 中开发一个项目,由于旧的强制性第三方库,该项目仅限于 .NET 4.8。 我最近一直在努力解决用户输入有效的问题...
我正在使用 MVVM 设计模式在 C# WPF 中开发一个项目,由于旧的强制性第三方库,该项目仅限于 .NET 4.8。 我最近一直在努力解决用户输入有效的问题...
我有一个包含两个文本框的表单:MultiStageCountValue,表示要选择的功能数量,以及MultistagePercentageValue,表示要选择的功能的百分比
我在我的应用程序中使用 Angular2。在我的 html 中,我有一个像这样的 *ngFor : {{元素.id}} 然后我有一个像这样的对象数组:
我正在WPF中制作一个应用程序,它需要能够让用户决定他们想要的字体和字体大小(或者更确切地说是字体比例值)。在应用程序设置视图中,我计划添加一个 sl...
假设我有一个带有返回命令的属性的窗口(事实上,它是一个在 ViewModel 类中带有命令的 UserControl,但让我们尽可能简单地重现问题)...
DataBinding 未在 WPF 窗口中显示我的有界数据源
我对 XAML、WPF、MVVM 等概念很陌生。首先,也许对我糟糕的英语技能感到抱歉:P 我的任务是创建一个需要用户输入的应用程序。我的主窗口是一个用户...
我正在WPF中制作一个应用程序,它需要能够让用户决定他们想要的字体和字体大小(或者更确切地说是字体比例值)。在应用程序设置视图中,我计划添加一个 sl...
我正在尝试将组合框绑定到我使用绑定导航器导航的数据集中的值。 我有一个表单,以及一些通过绑定导航器绑定到数据集的文本框。 绑定到
WinUI:视图模型中的 PropertyChanged 处理程序为空
我有这个 win ui 主窗口,它分配一个视图模型并绑定到一个属性。文本最初从视图模型正确显示,但是当视图模型更新文本时,控件...
参考:https://developers.arcgis.com/javascript/latest/get-started-angular/ 我正在尝试使用 Angular 实现 Arcgis,一切正常,地图正在显示,图层正在工作,直到 Ite...
一直在尝试 Angular 18,这是我的情况。我有一个仪表板应用程序,其中包含左侧菜单组件、标题组件和主窗口组件。我有一个切换按钮...
我正处于使用 Avalonia 的简单应用程序的开始阶段。我只是尝试使用一个简单的字符串属性为对象列表添加一个简单的数据绑定。 这就是 DataSources 类的作用...
对于 MAUI 开发来说相当陌生。我的 MAUI 应用程序中有一种情况,我需要根据布尔值更改许多标签的文本颜色。因此,如果布尔为真,我希望许多标签从白色切换...
我有一个 xaml 脚本,它不会监听 OnPropertyChanged。初始化视图时,它可以正常工作,但我无法更新它。 零件.xaml: 我有一个 xaml 脚本,它不会监听 OnPropertyChanged。初始化视图时,它可以正常工作,但我无法更新它。 零件.xaml: <UserControl x:Class="Page_Navigation_App.View.Parts" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:vm="clr-namespace:Page_Navigation_App.ViewModel" xmlns:utils="clr-namespace:Page_Navigation_App.Utilities" mc:Ignorable="d" d:DesignHeight="600" d:DesignWidth="622" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Style="{StaticResource Page_Style}"> <UserControl.DataContext> <vm:PartsVM x:Name="_model"/> </UserControl.DataContext> ..... <Grid Margin="15"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="5" /> <!-- Width for the splitter --> <ColumnDefinition Width="*" /> <!-- Width of the details pane --> </Grid.ColumnDefinitions> <!-- ListView for Parts or Variants --> <ListView ItemsSource="{Binding TableData}" SelectedItem="{Binding SelectedPart, Mode=TwoWay}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="0" Margin="0,0,0,10" Visibility="{Binding PartsVisibility}"> <ListView.ItemTemplate> <DataTemplate> <!-- Card Container --> <Border Background="#343a40" CornerRadius="10" Padding="10" BorderBrush="#3C3F41" BorderThickness="1" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.ColumnSpan="3" Width="Auto" > <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <!-- Define rows for labels, values, and button --> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <!-- ID Field --> <TextBlock Text="Image:" FontWeight="Bold" Foreground="White" Margin="0,0,10,0" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" /> <TextBlock Text="{Binding [ID], UpdateSourceTrigger = PropertyChanged}" Foreground="White" Margin="0,0,20,0" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Stretch" /> <!-- Description Field --> <TextBlock Text="Description:" FontWeight="Bold" Foreground="White" Margin="0,0,10,0" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch" /> <TextBlock Text="{Binding [Description],UpdateSourceTrigger=PropertyChanged}" Foreground="White" Margin="0,0,20,0" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" /> <!-- Additional Details (Optional) --> <TextBlock Text="Type:" FontWeight="Bold" Foreground="White" Margin="0,0,10,0" Grid.Column="2" Grid.Row="0" Visibility="{Binding [Type], Converter={StaticResource StringToVisibilityConverter} }" HorizontalAlignment="Stretch" /> <TextBlock Text="{Binding [Type] , UpdateSourceTrigger=PropertyChanged}" Foreground="White" Margin="0,0,20,0" Grid.Column="2" Grid.Row="1" Visibility="{Binding [Type], Converter={StaticResource StringToVisibilityConverter}}" HorizontalAlignment="Stretch" /> <!-- Button --> <Button Content="Variants" Command="{Binding DataContext.ShowVariantsCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}} , UpdateSourceTrigger=PropertyChanged}" CommandParameter="{Binding}" Grid.Column="3" Grid.Row="0" Grid.RowSpan="3" VerticalAlignment="Stretch" Margin="0,10,0,0" HorizontalAlignment="Stretch" Padding="5,2"/> </Grid> </Border> </DataTemplate> </ListView.ItemTemplate> </ListView> Parts.xaml.cs: namespace Page_Navigation_App.View { /// <summary> /// Interaction logic for Customers.xaml /// </summary> public partial class Parts : UserControl { //private PartsVM _model = new PartsVM(); public Parts() { InitializeComponent(); //DataContext = new PartsVM(); } } } PartsVM.cs: using Microsoft.Data.SqlClient; using Page_Navigation_App.Utilities; using System; using System.Collections.ObjectModel; using System.Data; using System.Linq; using System.Windows; using System.Windows.Input; namespace Page_Navigation_App.ViewModel { class PartsVM : Utilities.ViewModelBase { private readonly DBHandler _dbHandler; private static string TCPServer = "*****"; private static string DBCatalog = "*****"; private string _test; //private DBHandler dbHandler; private SqlConnection _sqlConnection; private ObservableCollection<DataRow> _tableData; private DataRow _selectedPart; private ObservableCollection<Variant> _variants; private bool _isViewingVariants; private Visibility _partsVisibility; private Visibility _reversePartsVisibility = Visibility.Collapsed; private ObservableCollection<EndUser> _endUsers; private string tableName = "Sales.Parts"; // Define column names at the class level private readonly ObservableCollection<string> columnNames = new ObservableCollection<string> { "ID", "Description", "Type", "Comment" }; int i = 0; public ObservableCollection<EndUser> EndUsers { get { return _endUsers; } set { _endUsers = value; OnPropertyChanged(nameof(EndUsers)); } } public ObservableCollection<DataRow> TableData { get { return _tableData; } set { _tableData = value; OnPropertyChanged(nameof(TableData)); } } public string Test { get { return _test; } set { _test = value; OnPropertyChanged(nameof(Test)); } } public DataRow SelectedPart { get { return _selectedPart; } set { _selectedPart = value; OnPropertyChanged(); } } public ObservableCollection<Variant> Variants { get { return _variants; } set { _variants = value; OnPropertyChanged(); } } public bool IsViewingVariants { get { return _isViewingVariants; } set { _isViewingVariants = value; OnPropertyChanged(); } } public Visibility PartsVisibility { get { return _partsVisibility; } set { _partsVisibility = value; OnPropertyChanged(); } } public Visibility ReversePartsVisibility { get { return _reversePartsVisibility; } set { _reversePartsVisibility = value; OnPropertyChanged(); } } public ICommand ShowVariantsCommand { get; set; } public ICommand BackToPartsCommand { get; set; } public PartsVM() { _tableData = new ObservableCollection<DataRow>(); SQLConnectionManager.Initialize(); _sqlConnection = SQLConnectionManager.GetConnection(); if (_sqlConnection == null) { throw new InvalidOperationException("Database connection is not initialized."); } _dbHandler = new DBHandler(_sqlConnection); GetAll(); //Search("test"); } public void GetAll() { i++; string query = $"SELECT * FROM {tableName};"; var dataTable = new DataTable(); using (var command = new SqlCommand(query, _sqlConnection)) { using (var adapter = new SqlDataAdapter(command)) { // Fill the DataTable with the result of the query adapter.Fill(dataTable); } } this.Test = i.ToString(); // Convert DataTable rows to ObservableCollection<DataRow> var rows = new ObservableCollection<DataRow>(dataTable.AsEnumerable()); // Clear the existing TableData and add the new rows TableData.Clear(); /*foreach (var row in rows) { TableData.Add(row); }*/ TableData = rows; // Notify that TableData has changed //OnPropertyChanged(nameof(TableData)); } public void Search(string searchTerm) { // Escape special characters in searchTerm for SQL LIKE string escapedSearchTerm = "%" + searchTerm + "%"; // Generate the LIKE clause for each column string likeClause = string.Join(" OR ", columnNames.Select(col => $"{col} LIKE @searchTerm")); string query = $"SELECT * FROM {tableName} WHERE {likeClause};"; //MessageBox.Show(query); var dataTable = new DataTable(); using (var command = new SqlCommand(query, _sqlConnection)) { // Add the parameter once to be used in all LIKE statements command.Parameters.AddWithValue("@searchTerm", escapedSearchTerm); using (var adapter = new SqlDataAdapter(command)) { // Fill the dataTable with the query result adapter.Fill(dataTable); } } var rows = new ObservableCollection<DataRow>(dataTable.AsEnumerable()); int test = TableData.Count; // Convert DataTable rows to an ObservableCollection of DataRow TableData.Clear(); foreach (DataRow row in rows) { TableData.Add(row); } TableData = rows; } } } ViewmodelBase: namespace Page_Navigation_App.Utilities { class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged([CallerMemberName] string propName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName)); } } } 我知道函数被触发了,因为我已经调试过了。 搜索功能由不同脚本中的函数触发。我还知道 DataTable 正在正确更新,但 UI 不会更新。我尝试手动触发 PropertyChanged,无论是否显式设置 UpdateSourceTrigger。 我不知道为什么这不起作用。预先感谢 您使用的语法无效,这里正确的绑定语法是: <TextBlock Text="{Binding ID}" />
有没有办法使用滑块的 ControlTemplate 触发值更改事件
我正在尝试设计一个 ControlTemplate,使 Slider 看起来像 NumericUpDown 控件。 它有一个三列的网格,其中有一个递减按钮,一个显示的文本块...
这个完全相同的代码在一小时前运行得很好。 调整了一些东西,然后 ctrl+Z 回到这个状态 现在每次我在 Android 模拟器上运行它时,当我尝试加载...