WPF Menampilkan boolean dengan tombol radio

Saat ini saya sedang dalam proses membuat aplikasi yang memiliki beberapa tampilan CRUD. Saya ingin menampilkan boolean di salah satu tampilan saya untuk mengedit baris. Saya menggunakan jawaban ini di sini untuk mencoba dan menyelesaikan masalah ini. Saya dapat mengedit baris sekali, jika saya coba lagi saya mendapatkan pengecualian stackoverflow (apakah saya mengubah ke nilai boolean atau tidak)

Deklarasi sumber daya:

<UserControl.Resources>
    <bconv:BoolInverterConverter x:Key="BoolInverterConverter" />
</UserControl.Resources>

Tombol radio:

<RadioButton Grid.Column="0" GroupName="istemplate"
                                 Content="Yes" IsChecked="{Binding Survey.isTemplate, Mode=TwoWay}" />
                    <RadioButton Grid.Column="1" GroupName="istemplate"  Content="No" Margin="10,0,0,0"
                                 IsChecked="{Binding Survey.isTemplate, Mode=TwoWay, Converter={StaticResource BoolInverterConverter}}" />

Item yang saya coba edit boolean (isTemplate):

[Table("Survey")]
public class Survey : EntityBase
{
    [Required, StringLength(50)]
    public string Name { get; set; }
    public User ConfirmedBy { get; set; }
    public Boolean isTemplate { get; set; }
    public Assignment Assignment { get; set; }
    public User User { get; set; }
    [DataType(DataType.Date)]
    public DateTime Date { get; set; }
}

Jika saya lupa menyertakan beberapa informasi, silakan bertanya!


person Jjampong    schedule 15.11.2018    source sumber
comment
Itu seharusnya berupa kotak centang, bukan sepasang tombol radio, di mana pembaruan yang satu akan memanggil yang lain yang mengarah ke siklus dan tumpukan meluap   -  person sramalingam24    schedule 16.11.2018
comment
@ sramalingam24 Kecuali fakta bahwa kotak centangnya terbalik a.t.m. itu berhasil, terima kasih :)   -  person Jjampong    schedule 16.11.2018
comment
Saya baru saja membuat program kecil, menggunakan kode Anda dan konverter dari tautan yang Anda berikan. Ini berfungsi seperti yang diharapkan. Pengecualian Anda tidak ada pada kode yang Anda berikan. Dugaan saya adalah, itu ada di ViewModel Anda. Saat Anda membobol debugger, apa yang diberitahukan oleh tumpukan panggilan kepada Anda?   -  person Nik    schedule 16.11.2018


Jawaban (3)


Masalahnya telah terpecahkan berkat komentar @sramalingam24

Itu seharusnya berupa kotak centang, bukan sepasang tombol radio, di mana pembaruan yang satu akan memanggil yang lain yang mengarah ke siklus dan tumpukan meluap

Kelas pembantu yang saya gunakan sebelumnya dapat dihapus begitu saja. Yang diperlukan hanyalah Kotak Centang

person Jjampong    schedule 16.11.2018

Saya menghadapi masalah serupa, jadi saya ingin membagikan apa yang saya temukan.

Alasannya adalah Anda menggunakan GroupName.

GroupName secara otomatis mengatur ulang tombol radio lainnya. Itu memicu properti pembaruan tambahan di viewModel. Dan kemudian Anda mendapatkan pengecualian StackOverflow sejak properti pembaruan tombol radio kedua dengan nilai berlawanan.

Tidak selalu mungkin mengganti tombol radio pada kotak centang. Misalnya, jika Anda memiliki satu properti yang terikat melalui konverter di lebih dari 2 tombol radio.

person Anton    schedule 26.12.2019
comment
Inilah yang terjadi pada saya. Terikat 2 tombol radio ke properti boolean yang sama (satu dengan invertedbooleanconverter) dan sebagai kebiasaan, saya memilikinya sebagai GroupName yang sama. Solusinya persis seperti yang disarankan @Anton: Jika Anda ingin model tampilan Anda tidak berubah, cukup hapus properti GroupName di RadioButtons. - person demonllama; 27.02.2020

Pengecualian StackOverFlow menunjuk ke melakukan sesuatu secara Rekursif/Tanpa henti.

Saya belum melihat kode Anda, tetapi tebakan liar - Periksa Setter Binding Anda: Survey.isTemplate. Apakah Anda menugaskan properti CLR atau properti Terikat.

Ex:

private string _Name = null;

public string Name
{
    get
    {
        return _Name;  // If you do return Name here - it will be overflow exception
    }
    set
    {
        _Name = value;  // If you do Name = value instead - it will be Overflow exception.
        NotifyPropertyChange("Name");
    }
}
person Prateek Shrivastava    schedule 16.11.2018