Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF问题_Wpf_Data Binding_Binding_Wpf Controls - Fatal编程技术网

WPF问题

WPF问题,wpf,data-binding,binding,wpf-controls,Wpf,Data Binding,Binding,Wpf Controls,我有一个usercontrol,它将datacontext绑定到SelectedSchedule,只需单击一个按钮,就会打开一个窗口,可以编辑SelectedSchedule,工作正常。在此窗口中有一个组合框,其中包含一些SelectedSchedule可供选择,SelectedItem属性绑定到SelectedSchedule。当我现在在组合框中选择另一个对象时,它没有得到新对象,只是没有发生/更改 我做错了什么 用户控件XAML: <Label Content="{Binding Pa

我有一个usercontrol,它将datacontext绑定到SelectedSchedule,只需单击一个按钮,就会打开一个窗口,可以编辑SelectedSchedule,工作正常。在此窗口中有一个组合框,其中包含一些SelectedSchedule可供选择,SelectedItem属性绑定到SelectedSchedule。当我现在在组合框中选择另一个对象时,它没有得到新对象,只是没有发生/更改

我做错了什么

用户控件XAML:

<Label Content="{Binding Path=SelectedSchedule.Name}" Margin="0,-6,0,0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" Height="32" Width="87"/>
编辑窗口XAML:

<ComboBox ItemsSource="{Binding ListOfSchedule}" SelectedItem="{Binding SelectedSchedule}" x:Name="cmdSchedule" HorizontalAlignment="Left" FontSize="16" Margin="17,27,0,0" VerticalAlignment="Top" Width="120"/>
编辑窗口视图模型:

    private Schedule _SelectedSchedule;

    public Schedule SelectedSchedule
    {
        get { return _SelectedSchedule; }
        set { _SelectedSchedule = value;
            OnPropertyChanged("SelectedSchedule"); }
    }

    private ObservableCollection<object> _ListOfSchedule;

    public ObservableCollection<object> ListOfSchedule
    {
        get { return _ListOfSchedule; }
        set { _ListOfSchedule = value;
            OnPropertyChanged("ListOfSchedule");
        }
    }

    public frmEditTracking_VM(Schedule GivenSchedule)
    {
        SelectedSchedule = GivenSchedule;
    }

    private void SaveAndClose()
    {
        SelectedSchedule.isTracked = true;
        OnClosingRequest();
    }

尝试以双向模式设置绑定

SelectedItem="{Binding SelectedSchedule, Mode=TwoWay}"
当对话框关闭时,您需要设置新值,因为对话框和viewmodel SelectedSchedule属性之间没有链接

newForm.ShowDialog();
SelectedSchedule = newForm.SelectedSchedule;

要了解为什么编辑工作正常,但分配无效,您可以尝试:

private Schedule mSelectedSchedule2;

public Schedule SelectedSchedule2
{
    get { return mSelectedSchedule2; }
    set
    {
        mSelectedSchedule2 = value;
        OnPropertyChanged("SelectedSchedule2");
    }
}

private Schedule _SelectedSchedule;

public Schedule SelectedSchedule
{
    get { return _SelectedSchedule; }
    set { _SelectedSchedule = value;
        OnPropertyChanged("SelectedSchedule"); }
}



 public EmployeeWeekCheckButon_VM(Schedule GivenSchedule)
 {
    SelectedSchedule = GivenSchedule;
    SelectedSchedule2 = GivenSchedule;
    SelectedSchedule.Name = "Test";
    Debug.WriteLine(SelectedSchedule.Name) //it's Test
    Debug.WriteLine(SelectedSchedule2.Name) //it's Test
    SelectedSchedule = new Schedule();
    SelectedSchedule.Name = "Test2";
    Debug.WriteLine(SelectedSchedule.Name) //it's Test2
    Debug.WriteLine(SelectedSchedule2.Name) //it's still Test because 
    //it's referencing the first object

 }

将模式设置为双向不更改任何内容,并且新表单没有属性SelectedSchedule,因为我使用的是ViewModel,所以ViewModel具有该属性。但是谢谢!很抱歉,如果要将对话框ViewModel的属性返回到基本ViewModel或使用iTrack属性将其返回,则需要授予对该属性的访问权限。我如何授予访问权限?为什么我只编辑对象而不尝试分配新对象时它工作?您可以在对话框的代码中添加一个方法,例如:GetSelectedSchedule,因为对话框可以访问其ViewModel,并且如果属性发生更改,您可以使用DialogResult属性通知基础ViewModel,或者将基本ViewModel作为对话框的参数而不是所选计划传递,然后使绑定生效,如:ViewModel.SelectedScheduleEdition,因为两个SelectedSchedule属性都引用相同的对象,分配不起作用,因为您更改了dialog ViewModel属性而不是基本ViewModel属性。在EditWindow中,SelectedSchedule的设置似乎是正确的。在SaveAndClose函数的调试模式下,SelectedSchedule具有正确的新对象。但是在OnClosingRequest之后,返回到UserControl将其设置回原始SelectedSchedule。只需编辑SelectedSchedule名称或ID即可,只需选择一个新的SelectedSchedule似乎不起作用。为什么不编辑第一个答案,而不是编写另一个答案?是否可以复制SelectedSchedule而无需提交参考?因为从原始问题复制/粘贴比使用编辑工具更容易对不起,我用错了编辑工具,下次我会编辑我的答案
private Schedule mSelectedSchedule2;

public Schedule SelectedSchedule2
{
    get { return mSelectedSchedule2; }
    set
    {
        mSelectedSchedule2 = value;
        OnPropertyChanged("SelectedSchedule2");
    }
}

private Schedule _SelectedSchedule;

public Schedule SelectedSchedule
{
    get { return _SelectedSchedule; }
    set { _SelectedSchedule = value;
        OnPropertyChanged("SelectedSchedule"); }
}



 public EmployeeWeekCheckButon_VM(Schedule GivenSchedule)
 {
    SelectedSchedule = GivenSchedule;
    SelectedSchedule2 = GivenSchedule;
    SelectedSchedule.Name = "Test";
    Debug.WriteLine(SelectedSchedule.Name) //it's Test
    Debug.WriteLine(SelectedSchedule2.Name) //it's Test
    SelectedSchedule = new Schedule();
    SelectedSchedule.Name = "Test2";
    Debug.WriteLine(SelectedSchedule.Name) //it's Test2
    Debug.WriteLine(SelectedSchedule2.Name) //it's still Test because 
    //it's referencing the first object

 }