【问题标题】:Bind data to TextBox inside DataGridTextColumn.Header将数据绑定到 DataGridTextColumn.Header 内的 TextBox
【发布时间】:2016-06-26 11:19:11
【问题描述】:

我有一个ObservableCollection

public ObservableCollection<RepairInfo> RepairList { get; set; }

我将它绑定到 DataGrid:

<DataGrid SelectionMode="Single" ItemsSource="{Binding RepairList}" Name="RepairsGrid" AutoGenerateColumns="False">

我没有使用 RepairInfo 类的所有属性,因此我指定了必须使用每个列的属性,如下所示:

<DataGridTextColumn Binding="{Binding IMEI}">
    <DataGridTextColumn.Header>
        <TextBox MinWidth="90" Text="{Binding IMEIFilter, UpdateSourceTrigger=PropertyChanged}" />
    </DataGridTextColumn.Header>                
</DataGridTextColumn>

DataGridTextColumn.Header 内部的TextBox 用于过滤数据。

所以这是我的问题 - 来自 TextBox 的值不要更新 ViewModel 中的属性。如果我把这个TextBox 放在DataGridTextColumn.Header 外面,一切都很好。我猜它是由我的DataGridTextColumnBinding 属性引起的,但我不知道如何解决它。

【问题讨论】:

  • 你能在这里显示视图模型吗?
  • 它非常大,所以我在googleDrive上分享它docs.google.com/document/d/…
  • 尝试绑定DataContext前缀。像这样:...
  • 我觉得绑定或视图模型没有问题。它更多地与此处定义标题模板的方式有关。我的猜测是应该定义某种数据模板来解决这个问题。
  • @dantey89 你能告诉我,IMEIIMEIFilter 属于哪个类?我将帮助我以更精确的方式给出解决方案。谢谢

标签: c# wpf


【解决方案1】:

国际海事组织。 .更好的方法是在 MainWindow Viewmodel 中拥有 Header 的属性,您可以像这样 Bind

 <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding IMEI}"> 
            <DataGridTextColumn.Header>
                <TextBox MinWidth="90" Text="{Binding DataContext.IMEIFilter, 
                           RelativeSource={RelativeSource AncestorType={x:Type local:MainWindow}}}"/>
            </DataGridTextColumn.Header>
        </DataGridTextColumn>
  </DataGrid.Columns>

参考: WPF datagrid header text binding

【讨论】:

  • 我阅读了链接的帖子并将代码重构为&lt;DataGridTextColumn Binding="{Binding IMEI}"&gt; &lt;DataGridTextColumn.HeaderTemplate&gt; &lt;DataTemplate&gt; &lt;TextBox MinWidth="90" Text="{Binding DataContext.IMEIFilter, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType={x:Type local:MainWindow}}}"/&gt; &lt;/DataTemplate&gt; &lt;/DataGridTextColumn.HeaderTemplate&gt; &lt;/DataGridTextColumn&gt;,现在可以使用了!
  • 主要是将这段代码RelativeSource={RelativeSource AncestorType={x:Type local:MainWindow}}} 添加到文本框,以便它可以了解将值放在哪里
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 2011-05-20
  • 2011-01-28
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
相关资源
最近更新 更多