WPF中DataBinding的灵活性如何?

r3s*_*0r3 5 c# data-binding wpf

WPF中DataBinding的灵活性如何?我是WPF的新手,想要有一个清晰的想法.我可以使用Slider值绑定字符串变量吗?它总是必须是一个控制?

是否可以将字符串值与Slider控件绑定,以便实时更新?逻辑树在多长时间内进行更新,或者我们必须重新发出所有命令以使用此新值?

那是我早些时候提出的匆忙问题.我发布了一个详细的问题.

我想要做的是,我有一个具有多个用户控件的应用程序.这些用户控件是网格视图,包含控件(TextBox,Button)和应用程序UI的各个部分.我用这种方法将我的主要XAML文件分割成多个文件,直到现在它都适用于我.现在,我在一个用户控件中有一个Slider,并希望在另一个用户控件中绑定一个String变量.字符串变量是只读的,因此不能用于双向绑定.

我希望这使我的问题清楚.在我的代码中,我正在尝试更新变量zoomFactor:

URLQuery.Append("&zoom=" + zoomFactor + "&size=600x500&format=jpg&sensor=false");
Run Code Online (Sandbox Code Playgroud)

使用滑块控件.对于那些能够发现它的人,是的,它是谷歌静态地图API,是的,我试图用滑块放大地图.

Fel*_*ano 4

您通常可以使用 来完成此类操作IValueConverter

创建适当的转换器时,您可以指定将其用于 XAML 中的绑定。

对于“实时”部分,只要您在 DataContext 对象中正确实现 INotifyPropertyChanged,修改变量就会反映在 UI 上,应用您决定的所有值转换器。让我们举一个使用滑块的示例,如您所说:

<Window x:Class="Example.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:Example"
        Title="MainWindow" Height="350" Width="525"
        >
    <Window.Resources>
        <local:HMLConverter x:Key="hiloConverter"></local:HMLConverter>
    </Window.Resources>
    <Slider Value="{Binding MyValue, Converter={StaticResource hiloConverter}}"  Maximum="100" Minimum="0"/>
</Window>
Run Code Online (Sandbox Code Playgroud)

我创建了一个名为 HMLConverter 的小转换器,它将字符串变量映射到相应的“lo”、“med”、ang“hi”字符串的值 0-50-100。该转换器被声明为静态资源,并在绑定中使用。转换器代码如下所示:

namespace Example
{
    public class HMLConverter:IValueConverter
    {
        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string val = value.ToString();
            int ret = 0;
            switch (val.ToLower())
            {
                case "hi":
                    ret = 100;
                    break;
                case "lo":
                    ret = 0;
                    break;
                case "med":
                    ret=50;
                    break;
                default:
                    throw new NotSupportedException("Value " + val + " is not supported");
            }
            return ret;

        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您可能猜到的那样,我只在一个方向上编写了它,因此绑定不能以两种方式工作,但我确信您已经获得了整个部分。