Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更新组合框控件模板中的值_C#_Wpf_Combobox - Fatal编程技术网

C# 更新组合框控件模板中的值

C# 更新组合框控件模板中的值,c#,wpf,combobox,C#,Wpf,Combobox,我在包含组合框的数据网格中实现了一个列。为了在列表仅包含一个值时显示文本框而不是组合框,我使用了本文中的解决方案: 但是,当列表中的一个值发生更改时,文本框中的值不会更新。当然,我已经实现了INotifyPropertyChanged,只要列表中有多个项目(换句话说,当显示组合框时),它就可以工作,但TextBlock中的值永远不会更新 编辑: <DataGridTemplateColumn.CellTemplate>

我在包含组合框的数据网格中实现了一个列。为了在列表仅包含一个值时显示文本框而不是组合框,我使用了本文中的解决方案:

但是,当列表中的一个值发生更改时,文本框中的值不会更新。当然,我已经实现了INotifyPropertyChanged,只要列表中有多个项目(换句话说,当显示组合框时),它就可以工作,但TextBlock中的值永远不会更新

编辑:

         <DataGridTemplateColumn.CellTemplate>
                                            <DataTemplate>
                                                <ComboBox Name="CList" ItemsSource="{Binding Values, UpdateSourceTrigger=PropertyChanged}" 
                                                          SelectedItem="{Binding Path=SelectedValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                                          SelectedIndex="0" BorderBrush="Transparent"
                                                          Background="Transparent">

                                                    <ComboBox.Style>
                                                        <Style TargetType="{x:Type ComboBox}" >
                                                            <Style.Triggers>
                                                                <DataTrigger Binding="{Binding Path=Items.Count, ElementName=CList}" Value="1">
                                                                    <Setter Property="Template">
                                                                        <Setter.Value>
                                                                            <ControlTemplate>
                                                                                <TextBlock Text="{Binding Items[0],  ElementName=CList}" />
                                                                            </ControlTemplate>
                                                                        </Setter.Value>
                                                                    </Setter>
                                                                </DataTrigger>
                                                            </Style.Triggers>
                                                        </Style>
                                                    </ComboBox.Style>
                                                </ComboBox>
                                            </DataTemplate>
                                        </DataGridTemplateColumn.CellTemplate>

我可以看到您正在绑定到项目本身,而不是其中的任何属性

因此,您可能需要绑定到数据项的相应属性

乙二醇


假设您的预期属性是
MyProperty


注意如果没有基础属性,则必须删除该项并将新项再次添加到列表中,以便更新文本块,在这种情况下,INotifyPropertyChanged也将不起作用

在此处显示您尝试的代码。我没有发布代码,因为它与我发布的链接中的代码完全相同。我没有任何基础属性,因此在更新绑定到的列表时,我将其重写了两次,一次使用空列表,然后使用其中包含新值的列表。我想列表中项目的计数必须更改,才能更新文本框中的值。非常感谢。是的,你说得对。似乎您正在绑定到字符串列表。我建议使用可观察的字符串集合绑定,这样您就可以简单地在集合上使用.ClearItems()或.RemoveItem(0),后跟.Add(“新项”),而不是两次替换整个列表
<TextBlock Text="{Binding Items[0].MyProperty, ElementName=CList}" />