Silverlight DataGridTemplateColumn 中綁定事件


前段時間一直很忙,老板催得緊:(

從今天開始,陸續記錄一些。

在Silverlight中,想實現DataGird中最后一列是自定義的操作按鈕,並按照MVVM模式綁定DataGrid的數據源、按鈕事件。

首先,初步想到的是這樣子。

<sdk:DataGrid ItemsSource="{Binding AdjustCurves}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" AutoGenerateColumns="False" MinHeight="50" x:Name="dataGrid1"  Visibility="{Binding IsShowList, Converter={StaticResource BooleanToVisibilityConverter1}}">
                    <sdk:DataGrid.Columns>
                        <sdk:DataGridTextColumn Header="名稱" Binding="{Binding CurveName}" IsReadOnly="True" MinWidth="120"/>
                        <sdk:DataGridTemplateColumn Header="操作"  >
                            <sdk:DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <HyperlinkButton  Content="編輯" Command="{Binding EditCommand}" />
                                </DataTemplate>
                            </sdk:DataGridTemplateColumn.CellTemplate>
                        </sdk:DataGridTemplateColumn>
                    </sdk:DataGrid.Columns>
                </sdk:DataGrid>

 

綁定代碼:

 private RelayCommand _editCommand;
        /// <summary>
        /// 編輯當前
        /// </summary>
        public RelayCommand EditCommand
        {
            get
            {
                if (_editCommand == null)
                {
                    _editCommand = new RelayCommand( () => MessageBox.Show("Edit"));
                }

                return _editCommand;
            }
        }

當然,按鈕事件綁定是無效的,在VS的輸出窗口中,可以看到錯誤信息(程序不會彈出錯誤,所以養成看輸出窗口很重要啊),提示在綁定的數據源實體類找不到“EditCommand”屬性。

試了很多方法后,最后在Google中找到了解決方案:Command binding inside a DataGridTemplateColumn

改為:

<HyperlinkButton  Content="編輯" Command="{Binding Path=DataContext.EditCommand,RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" />

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM