【问题标题】:wpf Listview with textbox error带有文本框错误的wpf Listview
【发布时间】:2015-04-22 09:09:22
【问题描述】:

我有一个带有 gridview 单元格模板的列表视图,作为文本框。

我可以在运行时更改 ui 中的 itemssource,但我不能这样做,在代码后面..

请任何想法为什么会不胜感激。

它绑定到自定义列表。

这是我目前的代码:

Xaml 模板。

<Style TargetType="{x:Type TextBlock}" x:Key="GridBlockStyle">
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="Visibility" Value="{Binding Path=IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}, Converter={StaticResource boolToVis}, ConverterParameter=False}" />
</Style>
<Style TargetType="{x:Type FrameworkElement}" x:Key="GridEditStyle">
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="Visibility" Value="{Binding Path=IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}, Converter={StaticResource boolToVis}, ConverterParameter=True}" />
</Style>
<DataTemplate x:Key="txt_Field" DataType="{x:Type GridViewColumn}">
            <Grid>
                <TextBlock Text="{Binding Path=txt}" Style="{StaticResource GridBlockStyle}"/>
                <TextBox Style="{StaticResource GridEditStyle}" Text="{Binding Path=txt}"/>
            </Grid>
</DataTemplate>

后面的代码:

DataTemplate t_txt = (DataTemplate)window.FindResource("txt_Field");
gridView.Columns.Add(new GridViewColumn { Header = "txt", CellTemplate = t_txt });

它会更新 itemssource,一旦 foreach 循环完成,Entries 就会被覆盖为 null。

try
{
      foreach (Items1 item in TempList)
      {
           foreach (Items1 item2 in list)
           {
                if (item.num == item2.num)
                {
                      item2.txt = item.txt;
                }
           }
     }
     listview.Items.Refresh();

}
catch { }

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    我找到了解决办法,但我还是想知道为什么会这样..

    这是解决方案:

    for (int i = 0; i < TempList.Count; i++)
    {
        if (Order_TempList[i].txt == ((Items1)listview.SelectedItem).txt)
        {
            ((Items1)listview.SelectedItem).txt = Order_TempList[i].txt;
            i = TempList.Count;
        }
    }
    

    我现在可以非常清楚地看到错误。 这是因为有两个 lists 和 visual list (listview.Items) 正在更新,而不是 physical list (TempList)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      相关资源
      最近更新 更多