WPF 데이터 바인딩하여 두 번째 보기

0

질문

내가 조금 하는 일에 문제가 절대적으로 우둔. 면 버튼을 클릭하여 두 번째로 그것을 전망이 열리지 않고 내용입니다. 나는 심지어 의해 중단점에서 볼 모델입니다. 이를 위해 나는 감소한 모든 것을 단순한 텍스트 상자 Textblock 는 종료 같은 데이터 표시,하지만 그들은하지 않습니다. 그들은 아무 것도 심지어를 입력 한 후 상자 블록을 업데이트하지 않습니다. 하지만 무엇보 데이터 바인딩 작동하지 않습니다. 사람은 아이디어?

사전에 감사합니다

나의 두 번째 보기

<Window x:Class="AoE4_BO_Overlay.Views.EditorView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:AoE4_BO_Overlay.Views" xmlns:viewmodels="clr-namespace:AoE4_BO_Overlay.ViewModels" d:DataContext="{d:DesignInstance Type=viewmodels:EditorViewModel}"
    mc:Ignorable="d"
    Title="EditorView" Height="450" Width="800">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto" />
        <ColumnDefinition Width="20" />
        <ColumnDefinition Width="20" />
    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>
        <RowDefinition Height="20" />
        <RowDefinition Height="auto" />
        <RowDefinition Height="auto" />
        <RowDefinition Height="20" />
    </Grid.RowDefinitions>
    <TextBlock Text="{Binding Path=FirstName}" Grid.Column="0" Grid.Row="2"/>
    <TextBox Text="{Binding Path=FirstName , Mode=OneWay}" Grid.Column="0" Grid.Row="1"/>
</Grid>

내 뷰 모델

    internal class EditorViewModel : Conductor<object>
{
    private string _firstName = "Tom";
    public EditorViewModel()
    {
    }

    public string FirstName
    {
        get
        {

            return _firstName;
        }
        set
        {
            _firstName = value;
            NotifyOfPropertyChange(() => FirstName);
        }
    }
}

얼마나 나는 모두 그들의

        public void CreateBO_Click(object sender, RoutedEventArgs e)
    {
        EditorView createBO = new EditorView();
        ActivateItemAsync(new EditorViewModel());
        createBO.Show();
    }

추가 정보

    public partial class EditorView : Window
{
    public EditorView()
    {
        DataContext = new EditorViewModel();
        InitializeComponent();
    }
}
c# caliburn.micro data-binding wpf
2021-11-22 11:39:16
2

최고의 응답

0

당신은 두 가지 별도의 문제점:

1. 입력으로 textbox 변경되지 않은 속성:

이것은 예상되기 때문을 사용할 OneWay 바인딩을 명시적으로 합니다. OneWay 바인딩을 의미 제공한 업데이트 사용자 인터페이스,하지만 다른 방법이다. 그래서 변경 FirstName 업데이트해야 하는 텍스트,하지만 변경 텍스트 상자를 업데이트하지 않 FirstName.

충분히 흥미롭게는 경우에,당신은 생략 Mode = OneWay 일부,그것은 작동하기 때문 텍스트 상자를 사용해야 TwoWay 바인딩 기본적으로 합니다. 추천을 정의 텍스트 상자에 바인딩으로 명시적으로 Mode = TwoWay

2. 뷰 초기화와 빈 TextBlock/TextBox

이 중 하나입니다 열심히 아래로 고정하기 때문에,당신은하지 않는 쇼를 설정하는 곳 매핑되는. 이것은 일반적으로 발생하는 때에 나를 설정 후에 매핑되는 InitializeComponent()대신하기 전에. 당신이 어느 설정하기 전에 매핑되는 바인딩을 초기화(의 일부로 InizializeComponent()),또는 당신을 인상하 NotifyPropertyChanged 에서 당신의 재산을 업데이트 UI 습니다.

이것이 원인이 아니라,사용하도록 설정할 수 있습니다 WPF 바인딩 오류로 출력에서 콘솔는 일반적으로 좋은 아이디어 바인딩은 실패합니다. Visual Studio 는 옵션이 있습니다. 위치해야합니다 여기:

Tools->Options->디버깅->출력 창->WPF 추적 설정 ->데이터 바인딩->모든

2021-11-22 12:54:14

첫째,매우 감사드립니다 당신의 대답이다.
rapta asdaf

많은 감사! 나 검색하는 데 필요한 작은,하지만 나는 그것을 발견했다. "매핑되=new EditorViewModel();"이 라인에 내가 누락되었습니다.
rapta asdaf

지 않는다. 당신은 확실합의 새 인스턴스 EditorViewModel 당신이 원하는 무엇인가? 일반적으로,접근 방식을 사용하는 것입 DataContext = this;InitializeComponent();
Shrimperator

확실합니까? no. 내가 읽는 조금도 어떤 일했다. 나의 솔루션을 생산하고 원하는 결과입니다. 면을 대체 new EditorViewModel()this 그것은 더 이상 작동하지 않습니다. 내가 알지 못하는 경우 그것은 무력하지만 내가 사용하는 Caliburn.마이크로서 프로젝트입니다. 다만에 대한 추가 정보를 추가한 클래스에서 질문으로 게시합니다.
rapta asdaf
0

내가 믿는 당신이 무엇을 하려고 여기를 표시하는 두 번째 보기(EditorView)내에서 첫 번째 중 하나(그리고 팝업으로-하려는 경우 그것을 팝업으로,사용 WindowManagerActivateItemAsync).

을 해야 하는 한 가지 변경이 가능하도록 초기 정렬하지는 창입니다.

// EditorView.xaml.cs
public partial class EditorView : UserControl

// EditView.xaml
<UserControl x:Class="AoE4_BO_Overlay.Views.EditorView"

또한 이를 사용하는 ActivateItemAsync을 필요로하는지 확인 FirstView 포함 ContendControl 이름"ActiveItem".

// FirstView.xaml
<ContentControl x:Name="ActiveItem"/>

전화 ActivateItemAsync 를 사용하는 것이어드하기 당신의 두 번째 뷰 모델(EditorViewModel). 으로 이 장소에서,당신은 지금 사용 ActivateItemAsync 드습니다.

public async Task CreateBO_Click(object sender, RoutedEventArgs e)
{
   await ActivateItemAsync(new EditorViewModel());
}

하시는 방법 ActivateItemAsync 을 지원하는 비동기화와 그것은 것이 현명 할 것이를 호출하는 방법이 비동기적으로 수행됩니다.

주목해야 할 또 다른 점은 당신이 지정하지 않은 매핑되는 명시적으로에서 볼 수 있듯이 OP 사용하는 경우 Caliburn 마이크로기/ViewModels 에 저장되는 권장되는 폴더/네임스페이스는 구조입니다. Caliburn 마이크로 사용하는 이름 지정 규칙을 연결하는 적절한 보기 뷰 모델 쌍이다. 더 많은 정보에 발견될 수 있에서 공식 문서

2021-11-23 06:48:07

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................