WPF自定义用户控件绑定在listview中总是返回false



我最近才开始使用WPF,所以我并不了解所有内容。我在Xaml文件中有一个列表视图,它列出了某个类的对象。

我已经创建了一个自定义用户控件(切换按钮)来切换对象的bool属性。以前,我使用复选框,一切都很好。

现在绑定总是返回False。

我不知道如何使它工作

My class:

public class Macro : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public const int EDITPIECE = 1, WALLREDITPIECE = 2, DORMIR = 3, NO_ACTION = 0;
public static double speed = 0;
private bool _status;
public bool status {
get {
return _status;
}
set {
if (value != this._status)
{
this._status = value;
NotifyPropertyChanged();
}
}
}
private string _key;
public string key {
get
{
return _key;
}
set
{
if (value != this._key)
{
this._key = value;
NotifyPropertyChanged();
}
}
}
public string _macroname { get; set; }
public int _action { get; set; }
...
}

my ListView:

<ListView Margin="10" Name="lvDataBinding" Width="auto"  Background="Transparent" Foreground="white" BorderThickness="0">

<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel>
<TextBlock Text="{Binding _macroname}" FontWeight="Bold" />
<TextBlock Text="  " />
<!-- Checkbox works fine --> <CheckBox IsChecked="{Binding status , Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Checked="CheckBoxChanged" Unchecked="CheckBoxChanged"/>
<!-- Custom Toggle not working --> <theme:OnOff Height="24" Width="40" Toggle="{Binding status, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock Text=" key : " />
<Button x:Name="keybutton" Content="{Binding key, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Click="keybutton_Click"/>
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

自定义用户控件:

public static readonly DependencyProperty ToggleProperty = DependencyProperty.Register("Toggle", typeof(bool), typeof(OnOff), new PropertyMetadata(false));
public bool Toggle
{
get { return (bool)base.GetValue(OnOff.ToggleProperty); }
set { base.SetValue(OnOff.ToggleProperty, value); }
}

如何填写我的列表:

public partial class Page1 : Page
{
private List<Macro> listMacroConfig = new List<Macro>();
public Page1()
{
InitializeComponent();
listMacroConfig = ((App)Application.Current)._macros;
lvDataBinding.ItemsSource = listMacroConfig;
}

我将onOff控件更改为:

public partial class OnOff : UserControl 
{
static Thickness LeftSide = new Thickness(-16, 0, 0, 0);
static Thickness RightSide = new Thickness(16, 0,0 , 0);

static SolidColorBrush gray = new SolidColorBrush(Color.FromRgb(139,139,144));
static SolidColorBrush red = new SolidColorBrush(Color.FromRgb(179, 34, 54));
static SolidColorBrush transparent = new SolidColorBrush(Color.FromArgb(0,0, 0, 0));

public static readonly DependencyProperty ToggleProperty = DependencyProperty.Register(nameof(Toggle), typeof(bool), typeof(OnOff), new PropertyMetadata(false, TooglePropertyChangedCallback));

public bool Toggle
{
get { return (bool)base.GetValue(OnOff.ToggleProperty); }
set { base.SetValue(OnOff.ToggleProperty, value); }
}
public OnOff()
{
InitializeComponent();
}

private void dot_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Toggle = !Toggle;
}

//  This is the callback that will update the background
private static void TooglePropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
var target = (OnOff)dependencyObject;
target.back.Fill = (target.Toggle ? red : transparent);
target.dot.Margin = (target.Toggle ? RightSide : LeftSide);
target.dot.Fill = (target.Toggle ? red : gray);
}

}

它现在运行得很好,有什么我可以改进的吗?

最新更新