Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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# MVVM WPF绑定在ListView上与ItemContainerStyle断开_C#_Wpf_Listview_Mvvm_Binding - Fatal编程技术网

C# MVVM WPF绑定在ListView上与ItemContainerStyle断开

C# MVVM WPF绑定在ListView上与ItemContainerStyle断开,c#,wpf,listview,mvvm,binding,C#,Wpf,Listview,Mvvm,Binding,当我将ItemContainerStyle应用于我的ListView(GridView)时,ItemSource绑定将显示对象名而不是对象值。本质上,当我应用容器样式时,绑定不再工作。我不明白为什么会出现这种情况,因为我仍然保留DisplayMemeberBinding到对象上的属性 下面是示例代码: 型号: public class Person { public string Name { get; set; } = "Randy Orton"; public int Age

当我将ItemContainerStyle应用于我的ListView(GridView)时,ItemSource绑定将显示对象名而不是对象值。本质上,当我应用容器样式时,绑定不再工作。我不明白为什么会出现这种情况,因为我仍然保留DisplayMemeberBinding到对象上的属性

下面是示例代码:

型号:

public class Person
{
    public string Name { get; set; } = "Randy Orton";
    public int Age { get; set; } = 26;
    public bool Employed { get; set; } = true;

    public Person(string name, int age, bool employed)
    {
        Name = name;
        Age = age;
        Employed = Employed;
    }

    public Person()
    {
    }
}
视图模型:

public ObservableCollection<Person> People { get; set; }

    public ViewModel()
    {
        People = new ObservableCollection<Person> { new Person(), new 
        Person(), new Person() };
    }
xaml:



要修复此问题,只需将
ContentPresenter
更改为
GridViewRowPresenter
控件模板内的
在ListViewItem控件模板中有一个普通的
。它对DisplayMemberBinding一无所知。在替换ControlTemplate时,还不清楚GridView将如何工作。你不再有专栏了,是吗?我还有专栏。如果您删除ItemContainerStyle,此代码将完全按照我的预期工作。各个项目中没有列,只有一个文本包含ContentPresenter默认的操作,即Person.ToString()的结果。请给我一个代码示例,说明如何解决此问题。请查看以查看是否存在GridViewRowPresenter而不是ContentPresenter。
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new ViewModel();
    }
}
    <Style x:Key="listviewitemStyle"
           TargetType="ListViewItem">
        <Style.Resources>
            <SolidColorBrush x:Key="HighlightTextBrushKey"
                 Color="Black" />
            <SolidColorBrush x:Key="HighlightBrushKey"
                 Color="#7d7d7d" />
            <SolidColorBrush x:Key="HighlightMouseOverBrushKey"
                 Color="{Binding Source={StaticResource HighlightBrushKey}, Path=Color}"
                 Opacity="0.3" />
            <SolidColorBrush x:Key="disabledTextBrushKey"
                             Color="#303030" />
            <SolidColorBrush x:Key="disabledBrushKey"
                             Color="#595959" />
        </Style.Resources>

        <Style.Setters>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListViewItem">
                        <Border BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"
                         Margin="{TemplateBinding Margin}">
                            <ContentPresenter />
                        </Border>

                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Background" Value="{StaticResource HighlightMouseOverBrushKey}" />
                                <Setter Property="Foreground" Value="{StaticResource HighlightTextBrushKey}" />
                            </Trigger>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="Background" Value="{StaticResource HighlightBrushKey}" />
                                <Setter Property="Foreground" Value="{StaticResource HighlightTextBrushKey}" />
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter Property="Background" Value="{StaticResource disabledBrushKey}" />
                                <Setter Property="Foreground" Value="{StaticResource disabledTextBrushKey}" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style.Setters>
    </Style>
</Window.Resources>

<Grid>
    <ListView
        ItemsSource="{Binding People, UpdateSourceTrigger=PropertyChanged}"
        ItemContainerStyle="{StaticResource listviewitemStyle}">

        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name" Width="auto" DisplayMemberBinding="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
                <GridViewColumn Header="Age" Width="auto" DisplayMemberBinding="{Binding Age, UpdateSourceTrigger=PropertyChanged}" />
                <GridViewColumn Header="Employed" Width="auto" DisplayMemberBinding="{Binding Employed, UpdateSourceTrigger=PropertyChanged}" />
            </GridView>
        </ListView.View>
    </ListView>
</Grid>