WPF PropertyGrid не применяет значение свойства - PullRequest
0 голосов
/ 06 июля 2011

Я использую этот элемент управления свойствами для 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}");

Ответы [ 2 ]

0 голосов
/ 19 марта 2012

Я не знаю точно для этой сетки (я использую эту ), но у меня там такая же проблема.Кажется, это общая проблема.Попробуйте удалить фокус из PropertyGrid в другой элемент управления перед выбором нового объекта или очистить свойство выбранного объекта.Например:

    public static void UpdatePropertyGridObjects(object objToSelect)
    {
        Components.DockManager.Focus();
        Components.PropertyGrid.SelectedObject = objToSelect;
    }
0 голосов
/ 06 июля 2011

Вам нужно отредактировать исходный код и изменить привязку в текстовом редакторе, чтобы он использовал UpdateSourceTrigger=PropertyChanged.

Чтобы найти область источника, которая нуждается в обновлении, вы можете использовать Snoop для проверки элемента управления.

Запустите ваше приложение, запустите Snoop, выберите свое приложение в раскрывающемся меню инструмента Snoop и щелкните бинокль. Теперь, если вы удерживаете клавиши shift и ctrl при наведении курсора на элемент управления, вы сможете увидеть его тип и все его свойства.

После этого вам просто нужно найти решение, чтобы найти этот тип и отредактировать привязку в XAML. Взгляните на эту страницу, чтобы узнать, как использовать свойство привязки UpdateSourceTrigger.

...