【问题标题】:Getting control inside a datagrid cell控制数据网格单元格
【发布时间】:2017-02-27 19:00:57
【问题描述】:

我有这样的事情:

<DataGridTemplateColumn Header="Occurences" Width="Auto">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=Occurences, Converter={StaticResource ListConverter}, Mode=TwoWay}" Margin="5,5,10,5"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <myCustomControls:OccurencesManualEntry/>
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

对于当前行,当我在此网格的另一列时,是否可以获取 &lt;myCustomControls:OccurencesManualEntry/&gt; 以便我可以设置它的一些属性?

【问题讨论】:

  • 不,不是因为 OccurencesManualEntry 控件只存在,然后 Occurences 单元格处于编辑模式。

标签: c# wpf vb.net xaml


【解决方案1】:

是否可以获得&lt;myCustomControls:OccurencesManualEntry/&gt; 以便我可以设置它的一些属性?

不,不是因为 OccurencesManualEntry 控件仅在“发生”单元格处于编辑模式时才存在。

您可以向OccurencesManualEntry 控件添加一个依赖属性并将其绑定到数据对象的源属性:

<myCustomControls:OccurencesManualEntry SomeProperty="{Binding SourceProperty}"/>

然后您可以从另一个单元格设置此源属性:

<DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
        <TextBox TextChanged="TextBox_TextChanged" />
    </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
    TextBox txtBox = sender as TextBox;
    var yourDataObject = txtBox.DataContext as YourDataClass;
    yourDataObject.SourceProperty = "value...";
}

确保数据类实现INotifyPropertyChanged接口并在源属性的setter中引发PropertyChanged事件。

【讨论】:

  • 这将是标准的 MVVM 方法。
猜你喜欢
  • 2013-11-11
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多