WPF PropertyGrid没有';t应用属性值
本文关键字:应用 属性 PropertyGrid 没有 WPF | 更新日期: 2023-09-27 18:01:12
我正在使用Denis Vuyka对WPF的财产控制。
我的问题是,如果我不按TAB键,它就不会应用属性的新值。
因此,如果我在属性网格中更改一个属性,然后单击"确定"按钮,该属性仍然是以前的值。
要复制的示例代码:
public partial class MainWindow : Window
{
DataObject dataObject = new DataObject();
public MainWindow()
{
InitializeComponent();
propertyGrid.SelectedObject = dataObject;
}
private void OnOK(object sender, RoutedEventArgs e)
{
MessageBox.Show("Value of test is " + dataObject.test);
}
}
class DataObject
{
public int test { get; set; }
public int test2 { get; set; }
}
<Window x:Class="PropGridTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:pg="http://schemas.denisvuyka.wordpress.com/wpfpropertygrid"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Grid.Row="0" IsDefault="True" Click="OnOK">OK</Button>
<pg:PropertyGrid x:Name="propertyGrid" Grid.Row="1">
</pg:PropertyGrid>
</Grid>
</Window>
只需在属性测试中键入一个数字,然后单击"确定"按钮。
有人知道这个问题的解决方法吗?
这是我迄今为止在OnOK中尝试过的,但没有成功:
propertyGrid.Focus();
propertyGrid.MoveFocus(new System.Windows.Input.TraversalRequest(System.Windows.Input.FocusNavigationDirection.Next));
System.Windows.Forms.SendKeys.SendWait("{TAB}");
您需要编辑源代码并更改文本编辑器上的绑定,使其使用UpdateSourceTrigger=PropertyChanged
。
要查找需要更新的源区域,可以使用Snoop检查控件。
运行应用程序,启动snoop,从snoop工具的下拉菜单中选择应用程序,然后单击双筒望远镜。现在,如果您按住shift
和ctrl
键,同时将光标悬停在控件上,您将能够看到它的类型及其所有属性。
之后,您只需要搜索解决方案即可找到该类型并在XAML中编辑绑定。有关如何使用UpdateSourceTrigger
绑定属性的信息,请查看此页面。
我不知道这个网格的确切情况(我使用这个(,但我在那里也有同样的问题。这似乎是一个常见的问题。在选择新对象或清除所选对象属性之前,请尝试将焦点从PropertyGrid移到另一个控件。例如:
public static void UpdatePropertyGridObjects(object objToSelect)
{
Components.DockManager.Focus();
Components.PropertyGrid.SelectedObject = objToSelect;
}