【问题标题】:Datagrid Cell content is not visible in WPFDatagrid 单元格内容在 WPF 中不可见
【发布时间】:2018-06-05 15:39:01
【问题描述】:

我有一个 8 列的数据网格,连接前 2 列值并将其绑定到每行的第 7 列。[绑定过程在第 6 列的日历关闭事件中完成]在绑定第 7 列值之后绑定值在特定行的第 7 个单元格中不可见,但如果我双击特定单元格,则数据可见...我不知道出了什么问题...

public class pojo
{
    public string Prefix { get; set; }
    public int Year { get; set; }
    public int QuarterNo { get; set; }
    public int SerialNo { get; set; }
    public string From { get; set; }
    public string To { get; set; }
    public string PeriodName { get; set; }
}

ObservableCollection<pojo> models = new ObservableCollection<pojo>();

private void Period_Name(object sender, RoutedEventArgs e)
{
    var rowdata = calendarmstrDG.SelectedItem as pojo;
    var prefix = rowdata.Prefix;
    int year = rowdata.Year;
    int year_twodigits = year % 100;
    string sth = prefix + '-' + year_twodigits.ToString();
    pojo obj = (pojo)calendarmstrDG.SelectedItem;
    obj.PeriodName = sth;
}

第 8 列的 Xaml 代码

 <DataGridTextColumn Binding="{Binding Path=PeriodName}"  Width="85" IsReadOnly="True" Header="Period Name"/>

【问题讨论】:

  • 您需要在设置后立即使用 INotifyOfPropertyChanged 在 UI 上获取这些结果
  • @sTrenat 我猜是INotifyPropertyChanged :)
  • 随便找这个,即使在 StackOverflow 上也有数百个回答如何实现这个接口

标签: c# wpf wpfdatagrid


【解决方案1】:

类应如下所示(省略其他字段):

public class pojo : INotifyPropertyChanged
{

    private string _prefix;
    private int _year;

    public string Prefix
    {
        get => _prefix;
        set
        {
            if (_prefix == value) return;
            _prefix = value;
            OnPropertyChanged(nameof(PeriodName));
        }
    }
    public int Year
    {
        get => _year;
        set
        {
            if (_year == value) return;
            _year = value;
            OnPropertyChanged(nameof(PeriodName));
        }
    }
    public string PeriodName => _prefix + '-' + (_year % 100).ToString(); 

    public event PropertyChangedEventHandler PropertyChanged;
    void OnPropertyChanged(string prop)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
    }
}

【讨论】:

  • 实际上,您通知了错误的属性:P 应该在 PeriodName 上,而不是 Year 和 Period
  • @sTrenat 不,伙计! PeriodName 绑定到这两个字段。实际上,OP 必须有MultipleBinding(OP 不包括他的 XAML)。 :)
  • 他正在使用普通绑定并将其连接到后面的代码中。更重要的是,使用 mulitBinding 通知是由 Ui 设置的,所以他不需要任何代码隐藏:P
  • @sTrenat 这就是我所说的多重绑定:) 误会抱歉:(
  • 我的意思是,如果 xaml 端设置了某些东西,则不需要 INotify 接口,所以:1.使用多绑定或 2.在 PeriodName 上使用通知:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-01
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
相关资源
最近更新 更多