如果绑定到CollectionViewSource的数据网格的源是ObservableCollection,则在首次显示时,实例化OC以显示其中没有任何内容的单行。
<DataGridTextColumn x:Name="observationNameColumn" Width="auto" Header="Observation Name" Binding="{Binding ObservationName}"/>
我想在任何给定字段中输入文本,以根据用户输入启动EF后端查询。为此,我将这样的按钮添加到同一数据网格中。一个带有点击处理程序的简单按钮......
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="XBTNSearch" Click="XBTNSearch_Click" Padding="5,0,5,0">Enter Search Criteria and Search</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
当使用编辑的值单击该行时,这是使用的代码类型。
private void XBTNSearch_Click(object sender, RoutedEventArgs e)
{
var context = ((Button)sender).DataContext;
Debugger.Break();
FindStuff();
}
当点到达断点时,显示了一个可观察集合类型的空模型,即使我在其中一个字段中输入了某些内容......我想要这个值,所以我可以使用EF来“FindStuff”
如何根据Button的datacontext获取行单元格中的值,该datacontext应该是我编辑文本的那一行?
答案 0 :(得分:0)
这个问题的解决方案是在Button click事件Hanlder中作为第一个语句......
instance FromField NominalDiffTime where
fromField f mdat =
if typeOid f /= typoid interval
then returnError Incompatible f ""
else case mdat of
Nothing -> returnError UnexpectedNull f ""
Just dat -> case parseOnly (nominalDiffTime <* endOfInput) dat of
Left msg -> returnError ConversionFailed f msg
Right t -> return t
nominalDiffTime :: Parser NominalDiffTime
nominalDiffTime = do
(h, m, s) <- interval
return . fromRational . toRational $ s + 60*(fromIntegral m) + 60*60*(fromIntegral h)
-- | Parse a limited postgres interval of the form [-]HHH:MM:SS.[SSSS] (no larger units than hours).
interval :: Parser (Int, Int, Pico)
interval = do
h <- signed decimal <* char ':'
m <- twoDigits <* char ':'
s <- seconds
if m < 60 && s <= 60
then return (h, m, s)
else fail "invalid interval"
-- functions below borrowed from postgresql-simple
seconds :: Parser Pico
twoDigits :: Parser Int
XDG是Xaml数据网格......