C# 如何绑定到列表框中的特定属性

C# 如何绑定到列表框中的特定属性,c#,wpf,C#,Wpf,我需要在第一次选择时更改列表项中文本的粗体 Xaml: 型号: public bool IsRead { get { return _isRead; } set { _isRead = value; OnPropertyChanged(this, "IsRead"); } } 如何绑定到列表中选定项的“IsRead”属性? 当前的方法一开始就检查所有电子邮件,之后不会

我需要在第一次选择时更改列表项中文本的粗体

Xaml:

型号:

public bool IsRead
    {
        get { return _isRead; }
        set
        {
            _isRead = value;
            OnPropertyChanged(this, "IsRead");
        }
    }
如何绑定到列表中选定项的“IsRead”属性?
当前的方法一开始就检查所有电子邮件,之后不会有任何更改。

只需使用
DataTrigger
,无需转换器

 <DockPanel >
        <TextBox DockPanel.Dock="Top" Text="{Binding FilterText, UpdateSourceTrigger=PropertyChanged}"></TextBox>
        <ListBox x:Name="list" ItemsSource="{Binding EmailsCollection}" SelectedItem="{Binding SelectedItem}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid >
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <Label Content="{Binding Sender}"  Name="SenderLabel" >
                            <Label.Style>
                                <Style TargetType="Label">
                                    <Setter Property="FontWeight" Value="Normal"/>
                                    <Style.Triggers>                                            
                                        <DataTrigger Binding="{Binding IsRead}" Value="true">
                                            <Setter Property="FontWeight" Value="Bold"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Label.Style>                                
                        </Label> 
                        <!--Style="{StaticResource Sender}"-->
                        <Label Grid.Row="1" Content="{Binding Subject}" FontSize="12" HorizontalAlignment="Left" />
                        <Label Grid.Column="1" Content="{Binding Date}" FontSize="12" HorizontalAlignment="Right" />
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </DockPanel>

更新:此处显示相应的模型/视图模型

  public class Email:INotifyPropertyChanged
{
    private bool _isRead;
    public bool IsRead
    {
        get { return _isRead; }
        set
        {
            _isRead = value;
            OnPropertyChanged();
        }
    }  
    private String _sender ;
    public String Sender
    {
        get
        {
            return _sender;
        }

        set
        {
            if (_sender == value)
            {
                return;
            }

            _sender = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

public partial class MainWindow : Window,INotifyPropertyChanged
{

    private ObservableCollection<Email> _emailsCollection = new ObservableCollection<Email>(){new Email(){Sender = "FirstSender",IsRead = true},new Email(){Sender = "SecondSender",IsRead = false}};

    public ObservableCollection<Email> EmailsCollection
    {
        get
        {
            return _emailsCollection;
        }

        set
        {
            if (_emailsCollection == value)
            {
                return;
            }

            _emailsCollection = value;
            OnPropertyChanged();
        }
    }
    private Email _selectedItem=new Email(){IsRead = true};
    public Email SelectedItem
    {
        get
        {
            return _selectedItem;
        }

        set
        {
            _selectedItem = value;
            _selectedItem.IsRead = true;
            OnPropertyChanged();

        }
    }
    public MainWindow()
    {
        InitializeComponent();            
    }
    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}
公共类电子邮件:INotifyPropertyChanged
{
私人住宅区;
公共图书馆
{
获取{return\u isRead;}
设置
{
_isRead=值;
OnPropertyChanged();
}
}  
私有字符串\u发送方;
公共字符串发送器
{
得到
{
返回发送者;
}
设置
{
如果(_sender==值)
{
返回;
}
_发送方=值;
OnPropertyChanged();
}
}
公共事件属性更改事件处理程序属性更改;
[NotifyPropertyChangedInvocator]
受保护的虚拟void OnPropertyChanged([CallerMemberName]字符串propertyName=null)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(handler!=null)handler(这是新的PropertyChangedEventArgs(propertyName));
}
}
公共部分类主窗口:窗口,INotifyPropertyChanged
{
私有ObservableCollection\u emailsCollection=new ObservableCollection(){new Email(){Sender=“FirstSender”,IsRead=true},new Email(){Sender=“SecondSender”,IsRead=false};
公共可见收集电子邮件收集
{
得到
{
返回电子邮件收集;
}
设置
{
如果(_emailsCollection==值)
{
返回;
}
_emailsCollection=值;
OnPropertyChanged();
}
}
私人电子邮件_selectedItem=new Email(){IsRead=true};
公共电子邮件SelectedItem
{
得到
{
返回_selectedItem;
}
设置
{
_选择editem=值;
_选择editem.IsRead=true;
OnPropertyChanged();
}
}
公共主窗口()
{
初始化组件();
}
公共事件属性更改事件处理程序属性更改;
[NotifyPropertyChangedInvocator]
受保护的虚拟void OnPropertyChanged([CallerMemberName]字符串propertyName=null)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(handler!=null)handler(这是新的PropertyChangedEventArgs(propertyName));
}
}
输出


只需使用
数据触发器
,无需转换器

 <DockPanel >
        <TextBox DockPanel.Dock="Top" Text="{Binding FilterText, UpdateSourceTrigger=PropertyChanged}"></TextBox>
        <ListBox x:Name="list" ItemsSource="{Binding EmailsCollection}" SelectedItem="{Binding SelectedItem}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid >
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <Label Content="{Binding Sender}"  Name="SenderLabel" >
                            <Label.Style>
                                <Style TargetType="Label">
                                    <Setter Property="FontWeight" Value="Normal"/>
                                    <Style.Triggers>                                            
                                        <DataTrigger Binding="{Binding IsRead}" Value="true">
                                            <Setter Property="FontWeight" Value="Bold"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Label.Style>                                
                        </Label> 
                        <!--Style="{StaticResource Sender}"-->
                        <Label Grid.Row="1" Content="{Binding Subject}" FontSize="12" HorizontalAlignment="Left" />
                        <Label Grid.Column="1" Content="{Binding Date}" FontSize="12" HorizontalAlignment="Right" />
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </DockPanel>

更新:此处显示相应的模型/视图模型

  public class Email:INotifyPropertyChanged
{
    private bool _isRead;
    public bool IsRead
    {
        get { return _isRead; }
        set
        {
            _isRead = value;
            OnPropertyChanged();
        }
    }  
    private String _sender ;
    public String Sender
    {
        get
        {
            return _sender;
        }

        set
        {
            if (_sender == value)
            {
                return;
            }

            _sender = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

public partial class MainWindow : Window,INotifyPropertyChanged
{

    private ObservableCollection<Email> _emailsCollection = new ObservableCollection<Email>(){new Email(){Sender = "FirstSender",IsRead = true},new Email(){Sender = "SecondSender",IsRead = false}};

    public ObservableCollection<Email> EmailsCollection
    {
        get
        {
            return _emailsCollection;
        }

        set
        {
            if (_emailsCollection == value)
            {
                return;
            }

            _emailsCollection = value;
            OnPropertyChanged();
        }
    }
    private Email _selectedItem=new Email(){IsRead = true};
    public Email SelectedItem
    {
        get
        {
            return _selectedItem;
        }

        set
        {
            _selectedItem = value;
            _selectedItem.IsRead = true;
            OnPropertyChanged();

        }
    }
    public MainWindow()
    {
        InitializeComponent();            
    }
    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}
公共类电子邮件:INotifyPropertyChanged
{
私人住宅区;
公共图书馆
{
获取{return\u isRead;}
设置
{
_isRead=值;
OnPropertyChanged();
}
}  
私有字符串\u发送方;
公共字符串发送器
{
得到
{
返回发送者;
}
设置
{
如果(_sender==值)
{
返回;
}
_发送方=值;
OnPropertyChanged();
}
}
公共事件属性更改事件处理程序属性更改;
[NotifyPropertyChangedInvocator]
受保护的虚拟void OnPropertyChanged([CallerMemberName]字符串propertyName=null)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(handler!=null)handler(这是新的PropertyChangedEventArgs(propertyName));
}
}
公共部分类主窗口:窗口,INotifyPropertyChanged
{
私有ObservableCollection\u emailsCollection=new ObservableCollection(){new Email(){Sender=“FirstSender”,IsRead=true},new Email(){Sender=“SecondSender”,IsRead=false};
公共可见收集电子邮件收集
{
得到
{
返回电子邮件收集;
}
设置
{