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));
        }
    }
}

WPF -将UserControl中的控件绑定到同一个UC中的类成员(c#)

您可以使用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更新),并用新值

更新实例。