首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >泛型类型的MVVM Datagrid到可观察的集合绑定

泛型类型的MVVM Datagrid到可观察的集合绑定
EN

Stack Overflow用户
提问于 2015-10-15 01:10:42
回答 1查看 654关注 0票数 0

我有一个xaml UserControl,其中的DataContext引用了一个“控件”-ViewModel。

代码语言:javascript
运行
复制
mc:Ignorable="d" d:DataContext="{d:DesignInstance controls:ControlViewModel}"

此外,我已经将ItemsSource绑定到一个ObservableCollection,它是一个“数据”-ViewModel的泛型。(请注意:这些数据仅用于演示)

代码语言:javascript
运行
复制
    <DataGrid ItemsSource="{Binding DataCollection}" SelectedItem="{Binding SelectedData}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
            <DataGridTextColumn Header="Age" Visibility="{Binding AgeVisibility}"  Binding="{Binding Age}"/>
        </DataGrid.Columns>
    </DataGrid>

代码语言:javascript
运行
复制
public class ControlViewModel
{
        private ObservableCollection<DataViewModel> _dataViewModels;
        public ObservableCollection<DataViewModel> DataViewModels
        {
            get { return _dataViewModels; }
            set
            {
                   _dataViewModels = value;
                    RaisePropertyChanged("DataViewModels");
            }
        }
}

"Data"-ViewModel具有以下属性,我已经将其绑定到特定的DataGridTextColumn (如您所见)。

代码语言:javascript
运行
复制
public class DataViewModel
{
        private string _name;
        public string Name
        {
            get { return _name; }
            set
            {
                _name = value;
                RaisePropertyChanged("Name");
            }
        }

        private int _age;
        public int Age
        {
            get { return _age; }
            set
            {
                _age = value;
                RaisePropertyChanged("Age");
            }
        }

        private Visibility _ageVisibility;
        public Visibility AgeVisibility
        {
            get { return _ageVisibility; }
        }
}

一切正常,除了"Age“列的Visibilty属性不容易引用Observable Collection的通用DataViewModel (属性),如Binding属性。因此它无法解决,并且始终处于默认状态。

EN

回答 1

Stack Overflow用户

发布于 2015-10-15 02:02:53

如果您想要一个可绑定的属性,那么向控制readonly属性的属性添加第二个RaisePropertyChanged

代码语言:javascript
运行
复制
public class DataViewModel
{
    //other stuff

    private int _age;
    public int Age
    {
        get { return _age; }
        set
        {
            _age = value;
            RaisePropertyChanged("Age");
            RaisePropertyChanged("AgeVisibility");
        }
    }

    public Visibility AgeVisibility
    {
        get { return this.Age > 0 ? Visibility.Visible : Visibility.Hidden; }
    }
}

您还可以使用类型转换器,如this

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33131584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档