2013-05-26 2 views
3

글꼴 크기 슬라이더와 텍스트 상자와 같은 두 개의 컨트롤을 바인딩하고 각 컨트롤은 wpf의 다른 창에 있으므로 어떻게 바인딩 할 수 있습니까?wpf의 두 개의 다른 창에서 두 컨트롤을 바인딩하는 방법은 무엇입니까?

1)는 WPF 프로젝트를 만듭니다 :

+2

아무 것도 시도해 보셨습니까? –

+0

그것은 대학 프로젝트입니다. 저는 같은 창에서 바인딩 할 수 있지만 다른 창 사이를 바인딩하는 방법을 알고 싶습니다. 바인딩 이외의 다른 방법이 있더라도 알고 싶습니까? 다른 창에서 슬라이더 컨트롤의 텍스트 크기를 변경해야합니다. – user2419978

+1

두 창 모두 FontSize와 같은 속성을 사용하여 동일한 ViewModel을 사용해야합니다. 그것을 윈도우의'DataContext'로 설정하고 바인드하십시오. –

답변

4

여기에 그것을 수행하는 방법의 예입니다.

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)는 다음과 같은 마크 업 BoundWindowSettingsWindow라는 이름의 프로젝트에 두 개의 새로운 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 바인딩 시스템을 변경하면 다른 값이 자동으로 변경됩니다.

관련 문제