将数据绑定到DataGridTextColumn.Header中的TextBox

时间:2016-03-11 09:24:51

标签: c# wpf

我有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>

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

所以这是我的问题 - 来自TextBox的值不会更新ViewModel中的属性。如果我把TextBox放在DataGridTextColumn.Header之外,一切都很好。我想这是由我Binding的{​​{1}}属性造成的,但我不知道如何解决它。

1 个答案:

答案 0 :(得分:1)

IMO。 。更好的方法是在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