C# 如何在wpf上的两个不同窗口中绑定两个控件?

C# 如何在wpf上的两个不同窗口中绑定两个控件?,c#,wpf,wpf-controls,C#,Wpf,Wpf Controls,我想绑定两个控件,如字体大小滑块和文本框,并且每个控件都位于wpf上的不同窗口上,所以如何绑定它们 下面是一个如何做到这一点的示例: 1)创建WPF项目 2)将主窗口.xaml的内容更改为以下内容(不要忘记更正我发布的所有代码中的名称空间,例如在我的代码中,名称空间是WpfApplication2): 4)使用以下代码在项目中创建名为ViewModel的类: namespace WpfApplication2 { using System.ComponentModel; pub

我想绑定两个控件,如字体大小滑块和文本框,并且每个控件都位于wpf上的不同窗口上,所以如何绑定它们

下面是一个如何做到这一点的示例:

1)创建WPF项目

2)
主窗口.xaml的内容更改为以下内容(不要忘记更正我发布的所有代码中的名称空间,例如在我的代码中,名称空间是
WpfApplication2
):

4)使用以下代码在项目中创建名为
ViewModel
的类:

namespace WpfApplication2
{
    using System.ComponentModel;

    public class ViewModel : INotifyPropertyChanged
    {
        private int _fontSizeSetting = 10;
        public event PropertyChangedEventHandler PropertyChanged;

        public int FontSizeSetting
        {
            get { return _fontSizeSetting; }
            set
            {
                _fontSizeSetting = value;
                OnPropertyChanged("FontSizeSetting");
            }
        }

        protected virtual void OnPropertyChanged(string propertyName)
        {
            var handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
5)使用以下标记将两个新的
窗口添加到名为
BoundWindow
SettingsWindow
的项目中:

<Window x:Class="WpfApplication2.BoundWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="BoundWindow" Height="300" Width="300">
    <Grid>
        <TextBox FontSize="{Binding FontSizeSetting, Mode=TwoWay}" Text="test..."/>
    </Grid>
</Window>

-



现在一切都应该按预期进行。基本上,您所做的是创建一个视图模型,将其设置为
窗口的
DataContext
。它们都绑定到视图模型的
FontSizeSetting
属性,当您在一个窗口中更改它时,WPF绑定系统会自动更改另一个值。

您尝试过什么吗?这是一个大学项目,我可以在同一个窗口上绑定,但我想知道如何在不同的窗口之间绑定,或者是否有绑定以外的其他方法?我需要更改其他窗口上滑块控件的文本大小。两个窗口都必须使用相同的ViewModel,并具有类似FontSize的属性。将其设置为Windows的
DataContext
,并绑定到它。
namespace WpfApplication2
{
    using System.ComponentModel;

    public class ViewModel : INotifyPropertyChanged
    {
        private int _fontSizeSetting = 10;
        public event PropertyChangedEventHandler PropertyChanged;

        public int FontSizeSetting
        {
            get { return _fontSizeSetting; }
            set
            {
                _fontSizeSetting = value;
                OnPropertyChanged("FontSizeSetting");
            }
        }

        protected virtual void OnPropertyChanged(string propertyName)
        {
            var handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
<Window x:Class="WpfApplication2.BoundWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="BoundWindow" Height="300" Width="300">
    <Grid>
        <TextBox FontSize="{Binding FontSizeSetting, Mode=TwoWay}" Text="test..."/>
    </Grid>
</Window>
<Window x:Class="WpfApplication2.SettingsWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SettingsWindow" Height="300" Width="300">
    <Grid>
        <Slider Value="{Binding FontSizeSetting, Mode=TwoWay}" Minimum="10" Maximum="100"/>
    </Grid>
</Window>