글꼴 크기 슬라이더와 텍스트 상자와 같은 두 개의 컨트롤을 바인딩하고 각 컨트롤은 wpf의 다른 창에 있으므로 어떻게 바인딩 할 수 있습니까?wpf의 두 개의 다른 창에서 두 컨트롤을 바인딩하는 방법은 무엇입니까?
1)는 WPF 프로젝트를 만듭니다 :
글꼴 크기 슬라이더와 텍스트 상자와 같은 두 개의 컨트롤을 바인딩하고 각 컨트롤은 wpf의 다른 창에 있으므로 어떻게 바인딩 할 수 있습니까?wpf의 두 개의 다른 창에서 두 컨트롤을 바인딩하는 방법은 무엇입니까?
1)는 WPF 프로젝트를 만듭니다 :
여기에 그것을 수행하는 방법의 예입니다.
2)) 네임 스페이스가 WpfApplication2
내 코드에서 예를 들어, 내가 게시하도록하겠습니다 모든 코드에서 네임 스페이스를 수정하는 것을 잊지 마세요 (다음에 MainWindow.xaml
의 내용을 변경 :
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<Button Content="Settings Window" Click="SettingsWindowButton_OnClick"/>
<Button Content="Bound Window" Click="BoundWindowButton_OnClick"/>
</StackPanel>
</Window>
3) 다음에 MainWindow.xaml.cs
의 내용을 변경 :
namespace WpfApplication2
{
using System.Windows;
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
ViewModel viewModel = new ViewModel();
public MainWindow()
{
InitializeComponent();
}
private void SettingsWindowButton_OnClick(object sender, RoutedEventArgs e)
{
var settingsWindow = new SettingsWindow();
settingsWindow.DataContext = viewModel;
settingsWindow.Show();
}
private void BoundWindowButton_OnClick(object sender, RoutedEventArgs e)
{
var boundWindow = new BoundWindow();
boundWindow.DataContext = viewModel;
boundWindow.Show();
}
}
}
<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>
: 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
의 추가 : 4) 다음 코드를 사용하여 프로젝트에 ViewModel
라는 이름의 클래스를 만듭니다
-
<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>
이제 모든 것 예상대로 작동해야합니다. 기본적으로 수행 한 작업은 뷰 모델을 만들어 (Window
)으로 설정하는 것입니다. 둘 다 뷰 모델의 FontSizeSetting
속성에 바인딩되며 한 창에서 WPF 바인딩 시스템을 변경하면 다른 값이 자동으로 변경됩니다.
아무 것도 시도해 보셨습니까? –
그것은 대학 프로젝트입니다. 저는 같은 창에서 바인딩 할 수 있지만 다른 창 사이를 바인딩하는 방법을 알고 싶습니다. 바인딩 이외의 다른 방법이 있더라도 알고 싶습니까? 다른 창에서 슬라이더 컨트롤의 텍스트 크기를 변경해야합니다. – user2419978
두 창 모두 FontSize와 같은 속성을 사용하여 동일한 ViewModel을 사용해야합니다. 그것을 윈도우의'DataContext'로 설정하고 바인드하십시오. –