DataGrid创建RadioButton列

16

我有一些绑定到 DataGrid 的对象。我创建了一个与对象的“Is Default”属性绑定的单选按钮列。

当应用程序启动时,正确的项目被显示为默认值,但是绑定随后永远不会更新。我希望的行为是让用户选中一个单选框,然后将该对象设为默认值。

        <DataGrid CanUserAddRows="False" AutoGenerateColumns="False" Name="TEst" >
        <DataGrid.Columns >
            <DataGridTextColumn Header="Value" Binding="{Binding Path=Name, Mode=OneTime}"/>

            <DataGridTemplateColumn Header="Is Default">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <RadioButton GroupName="Test" IsChecked="{Binding IsDefault}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

        </DataGrid.Columns>
    </DataGrid>

 private class Test : INotifyPropertyChanged
    {
        public string Name
        {
            get;
            set;
        }
        bool isDefult;
        public bool IsDefault
        {
            get
            {
                return isDefult;
            }
            set
            {
                isDefult = value;
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

    public MainWindow()
    {
        this.InitializeComponent();
        Test[] ya = new Test[] { new Test { Name = "1", IsDefault = false }, new Test { Name = "2", IsDefault = false }, new Test { Name = "3", IsDefault = true } };

        this.TEst.ItemsSource = ya;
    }

我整个下午一直在为这个问题苦恼,希望能得到帮助。

2个回答

17

很奇怪,但你所要做的就是更改 RadioButton 的绑定:

<RadioButton GroupName="Test" IsChecked="{Binding IsDefault, UpdateSourceTrigger=PropertyChanged}" />
据我所知,默认值是LostFocus,但在DataGrid中存在聚焦问题,我不知道为什么会出现这个问题。另外还有一个问题:在IsDefault属性的setter内引发PropertyChanged事件。现在没有通知也可以正常工作,但如果添加更多的XAML代码,很难找到UI为什么没有更新的原因。

谢谢你让我免于在桌子上猛敲头的痛苦。 - StrayPointer

2

仅设置UpdateSourceTrigger=PropertyChanged是不够的。你还需要添加Mode=TwoWay


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接