WPF datagrid выбранная строка нажал событие?

Модель упорядочения памяти x86 обеспечивает барьеры #StoreStore и #LoadStore для всех инструкций хранилища 1 sup>, что является всей необходимой семантикой выпуска. Также процессор выполнит инструкцию сохранения как можно скорее; когда инструкция сохранения удаляется, хранилище становится самым старым в буфере хранения, ядро ​​имеет целевую строку кэша в состоянии когерентности с возможностью записи, и порт кэша доступен для выполнения операции сохранения 2 sup>. Таким образом, нет необходимости в инструкции MFENCE. Флаг станет видимым для другого потока как можно скорее, и когда он это сделает, any_value гарантированно будет 10.

С другой стороны, последовательная согласованность также требует барьеров #StoreLoad и #LoadLoad. MFENCE требуется предоставить оба барьера 3 sup>, поэтому он используется на всех уровнях оптимизации.

Похожие: Размер буферов хранилища на оборудовании Intel? Что именно является буфером хранилища? .


Сноски:

(1) Существуют исключения, которые здесь не применяются. В частности, временные хранилища и хранилища в не кэшируемых типах памяти, сочетающих запись, обеспечивают только барьер #LoadStore. В любом случае, эти барьеры предусмотрены для магазинов с типом памяти с обратной записью на процессорах Intel и AMD.

(2) Это в отличие от хранилищ, сочетающих запись, которые сделаны глобально видимыми при определенных условиях. См. Раздел 11.3.1 руководства Intel, том 3.

(3) См. Обсуждение под ответом Петра.

34
задан demonplus 11 April 2016 в 10:57
поделиться

3 ответа

Вы можете добавить обработчик события в ItemContainerStyle (это стиль, применяемый к ряду) :

<DataGrid ... >
    <DataGrid.ItemContainerStyle>
        <Style TargetType="DataGridRow">
            <EventSetter Event="MouseDoubleClick" Handler="Row_DoubleClick"/>
        </Style>
    </DataGrid.ItemContainerStyle>
    ...
</DataGrid>

Затем, в обработчике, вы можете проверить, выбран ли ряд

private void Row_DoubleClick(object sender, MouseButtonEventArgs e)
{
    // execute some code
}
49
ответ дан 27 November 2019 в 16:36
поделиться

С привязкой данных и MVVM Вы сделали бы событие с одним щелчком (=selectedItem строки) как это:

    <Datagrid ItemsSource="{Binding YourObservableCollectionProperty}" 
        SelectedItem="{Binding YourSelectedItemProperty}"> 
     //more...      
    </Datagrid>

CodeBehind:

public partial class YourClass : Window
    {
        public YourClass()
        {
            InitializeComponent();
            this.DataContext = new YourClassViewModel();                      
        }
}

ViewModel:

public class YourClassViewModel : INotifyPropertyChanged
{

                public event PropertyChangedEventHandler PropertyChanged;
                public virtual void OnPropertyChanged(string propertyName)
                {
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                    }
                }

                private ObservableCollection<YourModelClass> _yourObservableCollectionProperty;
                public ObservableCollection<YourModelClass> YourObservableCollectionProperty
                {
                    get { return _yourObservableCollectionProperty; }
                    set
                    {
                        _yourObservableCollectionProperty = value;
                        OnPropertyChanged("YourObservableCollectionProperty");
                    }
                }

    private YourModelClass _yourSelectedItemProperty;
    public YourModelClass YourSelectedItemProperty
    {   
           get { return _yourSelectedItemProperty; }
           set
           {
                _yourSelectedItemProperty = value;
                OnPropertyChanged("YourSelectedItemProperty");
           }    
    }

//Constructor
public YourClassViewModel()
{

       /*Take your ModelClass instance and ObservableCollection instance here 

and play around with them or move them into a method. Normally your 

observablecollection is the itemssource of your datagrid and your selecteditem 

is your modelclass.*/

    }
        }
0
ответ дан 27 November 2019 в 16:36
поделиться

Почему бы вам не получить свойство SelectedRow во время события DoubleClick и не сделать с ним что-нибудь? Если SelectedRow равно null, это означает, что ни один ряд не выбран, поэтому просто верните его

private void Grid_DoubleClick(object sender, RoutedEventArgs e)
{
    if(grid.SelectedRow == null)
        return; // return if there's no row selected

    // do something with the Selected row here
}
0
ответ дан 27 November 2019 в 16:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: