问题 DataGrid创建RadioButton列


我有绑定到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;
    }

我整个下午一直在把头发拉出来。任何帮助都会被爱。


7415
2018-03-24 17:04


起源



答案:


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

<RadioButton GroupName="Test" IsChecked="{Binding IsDefault, UpdateSourceTrigger=PropertyChanged}" />

据我所知,默认值是LostFocus,但在DataGrid中有一些焦点问题。我不知道问题发生的原因。

另一个问题是:提高 PropertyChanged 事件内部的事件 IsDefault 属性。现在一切正常,没有通知,但如果你添加更多的xaml代码,将很难找出为什么UI没有更新。


12
2018-03-24 18:14



谢谢你让我免于大量敲打桌子。 - StrayPointer


答案:


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

<RadioButton GroupName="Test" IsChecked="{Binding IsDefault, UpdateSourceTrigger=PropertyChanged}" />

据我所知,默认值是LostFocus,但在DataGrid中有一些焦点问题。我不知道问题发生的原因。

另一个问题是:提高 PropertyChanged 事件内部的事件 IsDefault 属性。现在一切正常,没有通知,但如果你添加更多的xaml代码,将很难找出为什么UI没有更新。


12
2018-03-24 18:14



谢谢你让我免于大量敲打桌子。 - StrayPointer


设置 UpdateSourceTrigger=PropertyChanged 这还不够。你还需要 Mode=TwoWay


1
2018-04-04 22:01