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