WPF -将UserControl中的控件绑定到同一个UC中的类成员(c#)
本文关键字:UC 成员 同一个 绑定 UserControl 控件 WPF | 更新日期: 2023-09-27 18:03:15
如何将我的usercontrol中的控件绑定到WPF/c#中相同usercontrol中的类实例?例如,如果我移动滑块,某个类成员的值应该更新。如果我改变类或者其中的一些值它应该在UserControl中改变。
更一般的问题:什么是最简单的方法来创建UserControl编辑和加载一个类的公共字段?编辑:
用户控件
public partial class ThresholdingSettingsUC : UserControl
{
public ThresholdingSettings Settings { get; set; }
public ThresholdingSettingsUC ()
{
InitializeComponent ();
}
}
xaml
<UserControl x:Class="ColonyCounterApp.ThresholdingSettingsUC"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="300"
>
<Grid>
<DockPanel HorizontalAlignment="Left" Name="dockPanel1" VerticalAlignment="Top" Width="300">
<GroupBox Header="Hue filter" Height="150" Name="gbHue" DockPanel.Dock="Top">
<Grid>
<CheckBox Content="Use hue filtering" Height="16" HorizontalAlignment="Left" Margin="6,6,0,0" Name="cbHue" VerticalAlignment="Top" />
</Grid>
</GroupBox/>
</DockPanel>
</Grid>
</UserControl>
应该绑定到控件
的类
public struct ThresholdingSettings:INotifyPropertyChanged
{
/// <summary>
///
/// </summary>
public bool FilterHue {
get
{ return filterHue; }
set
{
if (filterHue==value)
{
return;
}
filterHue = value;
OnPropertyChanged ("FilterHue"); }
}
private bool filterHue;
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
private void OnPropertyChanged (string propertyName)
{
PropertyChangedEventHandler h = PropertyChanged;
if (h != null)
{
h (this, new PropertyChangedEventArgs (propertyName));
}
}
}
您可以使用ElementName
(我假设您的意思是用户控件本身的成员)。
class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public int Value { get; set; }
}
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Name="myUserControl"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Slider Value="{Binding Value, ElementName=myUserControl}" />
</Grid>
</UserControl>
您可以将类实例设置为userControl的DataContext,并使用带有相对路径的默认绑定机制。
为了支持双向绑定(类更新UI, UI更新类),类应该实现INotifyPropertyChanged(或者将指定的属性定义为DependencyProperty)。
如果不能更改Class代码,则需要在UserControl中公开所需的属性,并调用它的PropertyChanged事件(以允许UI更新),并用新值